GNU Parallel des armen Mannes in ksh implementiert?

8

Ich möchte die Funktion von GNU parallel verwenden, mit der der Befehl und die Liste, die parallel eingegeben werden, ausgeführt und nach Abschluss des Vorgangs ausgespuckt werden können. Ich möchte GNU jedoch nicht parallel auf allen unseren Servern installieren.

Oder vielleicht eine parallele Version von xargs?

Gibt es eine ksh-Implementierung dessen, was GNU Parallel tut? In diesem Fall muss dies nicht wie bei GNU Parallel erfolgen - solange der gesamte Ausgang weitergeleitet oder gespeichert werden kann. Ich möchte auch die Verwendung temporärer Dateien vermeiden.

Nitrodist
quelle
GNU Parallel ist ein einzelnes Perl-Skript. Ich bin gespannt, warum Sie lieber ein ksh-Skript als ein einzelnes Perl-Skript installieren, das nur sehr wenige Abhängigkeiten aufweist. Können Sie das näher erläutern? (Offenlegung: Ich bin der Autor von GNU Parallel)
Ole Tange

Antworten:

6

Wenn Sie auf einer Maschine mit mehreren Kernen parallelisieren möchten, können Sie einfach (GNU) verwenden xargs, z.

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

Bedeutung: xargsStartet bis zu 16 Prozesse parallel zur ./crunchingVerwendung von 1 Token von stdin für jeden Prozess.

Sie können auch splitin Kombination mit xargs verwenden.

Oder Sie können ein einfaches Makefile für die Jobausführung erstellen und aufrufen make -f mymf -j $CORES(für diese Lösung benötigen Sie temporäre Dateien).

PS: Das GNU-Parallelhandbuch enthält auch einige Vergleiche mit anderen Tools, einschließlich xargs und make . Interessanterweise schreiben sie:

(Sehr frühe Versionen von GNU parallel wurden zufällig mit make -j implementiert).

maxschlepzig
quelle
Für den Fragesteller ist es wichtig, dass "die gesamte Ausgabe weitergeleitet oder gespeichert werden kann". xargsist notorisch schlecht, wenn es parallel ausgeführt wird, da sich die Ausgabe mischen kann.
Ole Tange
@maxschlepzig: Ich stimme deiner Antwort zu 100% zu, ich benutze immer nur xargs. Viele Leute wissen einfach nicht, dass GNU xargs parallel arbeiten kann!
JM Becker
0

Sehen Sie sich an, parallel --embedwelche GNU Parallel in dasselbe Shell-Skript eingebettet sind, aus dem Sie es verwenden.

parallel --embed > new_script

Bearbeiten Sie dann new_script.

Ole Tange
quelle