In der Dokumentation zu GNU parallel gibt es eine ganze Liste von Programmen, die Jobs parallel von einer Shell ausführen können, die sogar Vergleiche zwischen ihnen enthält. Es gibt viele, viele Lösungen da draußen. Eine weitere gute Nachricht ist, dass sie wahrscheinlich ziemlich effizient Jobs planen, sodass alle Kerne/Prozessoren zu jeder Zeit beschäftigt sind.
Um die Dinge parallel laufen zu lassen, verwenden Sie '&' am Ende eines Shell-Befehls, um ihn im Hintergrund auszuführen, dann wait
wird standardmäßig (d. h. ohne Argumente) warten, bis alle Hintergrundprozesse beendet sind. Also, vielleicht 10 parallel starten, dann warten, dann noch 10 machen. Das geht ganz einfach mit zwei verschachtelten Schleifen.
Ein weiterer sehr praktischer Weg, dies zu tun, ist mit gnu parallel, das es sich lohnt zu installieren, wenn Sie es noch nicht haben; Dies ist von unschätzbarem Wert, wenn die Aufgaben nicht unbedingt die gleiche Zeit in Anspruch nehmen.
seq 1000 | parallel -j 8 --workdir $PWD ./myrun {}
wird ./myrun 1
starten , ./myrun 2
usw., um sicherzustellen, dass 8 Jobs gleichzeitig ausgeführt werden. Es kann auch Listen von Knoten aufnehmen, wenn Sie auf mehreren Knoten gleichzeitig laufen wollen, zB in einem PBS-Job; Unsere Anweisungen für unsere Benutzer, wie dies auf unserem System zu tun ist, finden Sie hier.
Aktualisiert um hinzuzufügen: Sie sollten sicherstellen, dass Sie gnu-parallel verwenden, nicht das eingeschränktere Dienstprogramm mit demselben Namen, das im moreutils-Paket enthalten ist (die unterschiedliche Geschichte der beiden wird hier beschrieben.)
Schauen Sie sich Bash-Subshells an, diese können verwendet werden, um Teile eines Skripts parallel auszuführen.
Ich habe das nicht getestet, aber das könnte ein Anfang sein:
#!/bin/bash
for i in $(seq 1 1000)
do
( Generating random numbers here , sorting and outputting to file$i.txt ) &
if (( $i % 10 == 0 )); then wait; fi # Limit to 10 concurrent subshells.
done
wait