Como posso executar o GNU paralelo no registro por trabalho, com 1 processo por núcleo

2

O que realmente estou tentando fazer é executar um número X de tarefas, com X em paralelo para testar uma condição de corrida da API.

Eu descobri isso

echo {1..10} | xargs -n1 | parallel -m 'echo "{}"';

que imprime

7 8 9
10
4 5 6
1 2 3

mas o que eu realmente quero ver é (a nota não importa realmente).

1
2
3
4
5
6
7
8
9
10

e estes seriam processados em paralelo 4 de cada vez (ou qualquer número de CPUs / núcleos, por exemplo, --jobs 4 ). Para um total de 10 execuções separadas.

Eu tentei isso

echo {1..10} | xargs -n1 | parallel --semaphore --block 3  -m 'echo -n "{} ";

mas só parece imprimir uma vez. pontos de bônus se a sua solução não precisa de xargs, o que parece ser um truque em torno da idéia de que o separador de registro padrão é uma nova linha, mas eu não consegui um espaço para trabalhar como eu quero também.

10 é um número razoavelmente pequeno, mas vamos dizer que é muito maior, 1000

echo {1..1000} | xargs -n1 | parallel -j1000

imprime

parallel: Warning: Only enough file handles to run 60 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 60 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.

Eu não quero realmente 1000 processos, eu quero 4 processos de cada vez, cada processo deve processar 1 registro, assim, quando eu terminar, ele terá executado 1000 vezes.

    
por xenoterracide 27.10.2017 / 22:20

2 respostas

4

I want 4 processes at a time, each process should process 1 record

parallel -j4 -k --no-notice 'echo "{}"' ::: {1..10}
  • -j4 - número de jobslots. Execute até 4 trabalhos em paralelo

  • -k - mantém a sequência da saída igual à ordem da entrada. Normalmente, a saída de um trabalho será impressa assim que o trabalho terminar

  • ::: - argumentos

A saída:

1
2
3
4
5
6
7
8
9
10
    
por 27.10.2017 / 23:15
1
seq 10 | parallel -j4 echo {}

Ou se você tiver 4 núcleos:

seq 10 | parallel echo
    
por 28.10.2017 / 20:57