Le pauvre GNU Parallel implémenté dans ksh?

8

Je voudrais utiliser la fonctionnalité de GNU parallel où il peut exécuter la commande et la liste qui est alimentée en parallèle et la recracher après tout, cependant, je ne veux pas installer GNU parallel sur tous nos serveurs.

Ou peut-être une version parallèle de xargs?

Existe-t-il une implémentation ksh de ce que fait GNU Parallel? Dans ce cas, cela ne doit pas être fait dans l'ordre comme le fait GNU Parallel - aussi longtemps que toute la sortie peut être canalisée ou stockée. Je voudrais également éviter d'utiliser des fichiers temporaires.

Nitrodist
la source
GNU Parallel est un script perl unique. Je suis curieux de savoir pourquoi vous préférez installer un script ksh plutôt que d'installer un seul script perl conçu pour avoir très peu de dépendances. Pourriez-vous préciser ceci? (Divulgation: je suis l'auteur de GNU Parallel)
Ole Tange

Réponses:

6

Si vous souhaitez paralléliser sur une machine avec plusieurs cœurs, vous pouvez simplement utiliser (GNU) xargs, par exemple:

echo seq_[0-9][0-9].gz | xargs -n 1 -P 16 ./crunching

Signification: xargsdémarre jusqu'à 16 processus en parallèle en ./crunchingutilisant 1 jeton de stdin pour chaque processus.

Vous pouvez également utiliser spliten combinaison avec xargs.

Ou vous pouvez créer un Makefile simple pour l'exécution et l'appel du Job make -f mymf -j $CORES(vous avez besoin de fichiers temporaires pour cette solution).

PS: Le manuel parallèle GNU comprend également des comparaisons avec d'autres outils, y compris xargs et make , ce qui est intéressant, ils écrivent:

(Les premières versions de GNU parallel ont été implémentées par coïncidence en utilisant make -j).

maxschlepzig
la source
Il est important pour le demandeur que "toutes les sorties puissent être canalisées ou stockées". xargsest notoirement mauvais quand il est exécuté en parallèle car la sortie peut se mélanger.
Ole Tange
@maxschlepzig: Je suis d'accord avec votre réponse à 100%, j'utilise toujours juste des xargs. Beaucoup de gens ne savent tout simplement pas que GNU xargs est capable de faire en parallèle!
JM Becker
0

Regardez parallel --embedqui incorpore GNU Parallel dans le même script shell que celui que vous utilisez.

parallel --embed > new_script

puis éditez new_script.

Ole Tange
la source