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.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino