Cenário:
$ cat libs.txt
lib.a
lib1.a
$ cat t1a.sh
f1()
{
local lib=$1
stdbuf -o0 printf "job for $lib started\n"
sleep 2
stdbuf -o0 printf "job for $lib done\n"
}
export -f f1
cat libs.txt | SHELL=$(type -p bash) parallel --jobs 2 f1
Invocação e saída:
$ time bash t1a.sh
job for lib.a started
job for lib.a done
job for lib1.a started
job for lib1.a done
real 0m2.129s
user 0m0.117s
sys 0m0.033s
Aqui vemos que a execução de f1
foi de fato em paralelo ( real 0m2.129s
).
No entanto, a saída de diagnóstico parece que a execução foi sequencial.
Eu esperava a seguinte saída de diagnóstico:
job for lib.a started
job for lib1.a started
job for lib.a done
job for lib1.a done
Por que a saída de diagnóstico parece uma execução sequencial em vez de uma execução paralela?
Como corrigir a saída de diagnóstico para que pareça uma execução paralela?
Nas páginas de manual do GNU
parallel
:[...]
Portanto, você deve adicionar ou
--line-buffer
ao--ungroup
seuparallel
comando (de acordo com seu comportamento preferido):