Paralelo GNU: exibe imediatamente o trabalho stderr / stdout um por vez por ordem de serviço

4

Eu sei que os buffers GNU Parallel std / stderr porque ele não quer que a saída de jobs seja desconfigurada, mas se eu executar meus jobs com parallel do_something ::: task_1 task_2 task_3 , existe de qualquer maneira a saída da task_1 ser exibida imediatamente, depois que a task_1 terminar , task_2 até sua saída atual, etc.

Se o Parallel não puder resolver este problema, existe algum outro programa semelhante que possa?

    
por Hai Luong Dong 21.04.2016 / 05:36

2 respostas

5

A partir da versão 20160422, você pode fazer:

parallel -k --lb do_something ::: task_1 task_2 task_3
    
por 21.04.2016 / 09:06
2

parallel na verdade não faz reservas quanto a tornar a produção em ordem. Acontece que os trabalhos são tipicamente pequenos o suficiente e divididos uniformemente no tempo da CPU para sair em ordem. Você percebe mais quando tem muitos trabalhos em execução ou a duração da tarefa é muito diferente.

Por padrão, parallel só executará a mesma quantidade de trabalhos que sua CPU possui núcleos. Na maioria dos laptops e desktops é 2-4, o que significa que está executando apenas alguns trabalhos de cada vez. Você pode aumentar isso com -j.

Veja um exemplo para demonstrar que a ordem de trabalho não é exibida na ordem em que foi enviada.

seq 20 | parallel -j 20 'sleep $[RANDOM % 20]; echo '

a saída no meu sistema foi (a sua provavelmente será diferente)

7
3
13
20
8
16
2
4
18
17
1
5
9
14
12
6
10
19
11
15

seq 20 é um comando que produzirá números de 1 a 20. Eu canalizo isso para paralelo e, em seguida, digo para ele executar 20 trabalhos simultâneos para garantir que todos eles iniciem ao mesmo tempo. 'sleep $[\[RANDOM][1] % 20]; está usando sleep mais um parâmetro zsh que retornará um número aleatório entre 1 e 20. Cada trabalho irá dormir esse valor aleatório e, em seguida, echo . Uma vez que o trabalho echo você vai imediatamente obter a saída de paralelo.

Você também pode fazer algo semelhante com parallel --shuf , o que embaralha a ordem de trabalho .

    
por 21.04.2016 / 06:18