O comando Bash paralelo está executando comandos sequencialmente

Sep 04 2020

Estou tentando baixar vários arquivos paralelamente no bash e me deparei com o GNU paralelo. Parece muito simples e direto. Mas estou tendo dificuldade em fazer o paralelo GNU funcionar. O que estou fazendo errado? Quaisquer dicas são apreciadas. Como você pode ver, a saída é muito sequencial e espero que a saída seja diferente a cada vez. Eu vi uma pergunta semelhante no SO (o GNU paralelo não está funcionando), mas as soluções mencionadas não funcionaram para mim.

svarkey @ svarkey-Precision-5510: ~$ seq 1 3 | xargs -I{} -n 1 -P 4 kubectl version --short=true --context cs-prod{} --v=6
I0904 11:33:10.635636   24861 loader.go:375] Config loaded from file:  /home/svarkey/.kube/config
I0904 11:33:10.640718   24863 loader.go:375] Config loaded from file:  /home/svarkey/.kube/config
I0904 11:33:10.640806   24862 loader.go:375] Config loaded from file:  /home/svarkey/.kube/config
I0904 11:33:11.727974   24863 round_trippers.go:443] GET https://kube-api.awsw3.cld.dtvops.net/version?timeout=32s 200 OK in 1086 milliseconds
Client Version: v1.18.7
Server Version: v1.14.6
I0904 11:33:11.741985   24861 round_trippers.go:443] GET https://kube-api.awsw1.cld.dtvops.net/version?timeout=32s 200 OK in 1105 milliseconds
Client Version: v1.18.7
Server Version: v1.14.6
I0904 11:33:11.859882   24862 round_trippers.go:443] GET https://kube-api.awsw2.cld.dtvops.net/version?timeout=32s 200 OK in 1218 milliseconds
Client Version: v1.18.7
Server Version: v1.14.6
svarkey@svarkey-Precision-5510:~$seq 1 3 | paralelo -j 4 -I {} kubectl version --short = true --context cs-prod {} --v = 6
Versão do cliente: v1.18.7
Versão do servidor: v1.14.6
I0904 11: 33: 18.584076 24923 loader.go: 375] Configuração carregada do arquivo: /home/svarkey/.kube/config
I0904 11: 33: 19.662197 24923 round_trippers.go: 443] OBTER https://kube-api.awsw1.cld.dtvops.net/version?timeout=32s 200 OK em 1077 milissegundos
Versão do cliente: v1.18.7
Versão do servidor: v1.14.6
I0904 11: 33: 18.591033 24928 loader.go: 375] Configuração carregada do arquivo: /home/svarkey/.kube/config
I0904 11: 33: 19.691343 24928 round_trippers.go: 443] OBTER https://kube-api.awsw3.cld.dtvops.net/version?timeout=32s 200 OK em 1099 milissegundos
Versão do cliente: v1.18.7
Versão do servidor: v1.14.6
I0904 11: 33: 18.591033 24924 loader.go: 375] Configuração carregada do arquivo: /home/svarkey/.kube/config
I0904 11: 33: 19.775152 24924 round_trippers.go: 443] OBTER https://kube-api.awsw2.cld.dtvops.net/version?timeout=32s 200 OK em 1183 milissegundos
svarkey @ svarkey-Precision-5510: / tmp / parallel-20200822 $ parallel --version
GNU paralelo 20200822
Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk e Software Livre
Foundation, Inc.
Licença GPLv3 +: GNU GPL versão 3 ou posterior 
Este é um software livre: você é livre para alterá-lo e redistribuí-lo.
Paralelo GNU vem sem garantia.

Site: https://www.gnu.org/software/parallel

Respostas

3 pLumo Sep 04 2020 at 11:01

parallela saída é sequencial porque captura a saída do processo e a imprime somente quando o processo é concluído, ao contrário do xargsque permite que os processos imprimam a saída imediatamente.

De man parallel

   GNU parallel makes sure output from the commands is the same output as
   you would get had you run the commands sequentially. This makes it
   possible to use output from GNU parallel as input for other programs.