La commande parallèle Bash exécute des commandes de manière séquentielle

Sep 04 2020

J'essaie de télécharger plusieurs fichiers en parallèle dans bash et je suis tombé sur GNU parallèle. Cela semble très simple et direct. Mais j'ai du mal à faire fonctionner GNU en parallèle. Qu'est-ce que je fais mal? Tous les pointeurs sont appréciés. Comme vous pouvez le voir, la sortie est très séquentielle et je m'attends à ce que la sortie soit différente à chaque fois. J'ai vu une question similaire dans SO (GNU parallèle ne fonctionne pas du tout) mais les solutions mentionnées là-bas n'ont pas fonctionné pour moi.

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 | parallèle -j 4 -I {} version kubectl --short = true --context cs-prod {} --v = 6
Version du client: v1.18.7
Version du serveur: v1.14.6
I0904 11: 33: 18.584076 24923 loader.go: 375] Configuration chargée à partir du fichier: /home/svarkey/.kube/config
I0904 11: 33: 19.662197 24923 round_trippers.go: 443] GET https://kube-api.awsw1.cld.dtvops.net/version?timeout=32s 200 OK en 1077 millisecondes
Version du client: v1.18.7
Version du serveur: v1.14.6
I0904 11: 33: 18.591033 24928 loader.go: 375] Configuration chargée à partir du fichier: /home/svarkey/.kube/config
I0904 11: 33: 19.691343 24928 round_trippers.go: 443] GET https://kube-api.awsw3.cld.dtvops.net/version?timeout=32s 200 OK en 1099 millisecondes
Version du client: v1.18.7
Version du serveur: v1.14.6
I0904 11: 33: 18.591033 24924 loader.go: 375] Configuration chargée à partir du fichier: /home/svarkey/.kube/config
I0904 11: 33: 19.775152 24924 round_trippers.go: 443] GET https://kube-api.awsw2.cld.dtvops.net/version?timeout=32s 200 OK en 1183 millisecondes
svarkey @ svarkey-Precision-5510: / tmp / parallel-20200822 $ parallel --version
GNU parallèle 20200822
Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk et logiciels libres
Fondation, Inc.
Licence GPLv3 +: GNU GPL version 3 ou ultérieure 
Il s'agit d'un logiciel gratuit: vous êtes libre de le modifier et de le redistribuer.
GNU parallel n'est pas garanti.

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

Réponses

3 pLumo Sep 04 2020 at 11:01

parallella sortie est séquentielle car elle capture la sortie du processus et ne l'imprime que lorsque ce processus est terminé, contrairement à xargsce qui permet aux processus d'imprimer la sortie immédiatement.

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.