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.