
Ich habe eine Sammlung von 150 CLI-Befehlen, die ich in einer Datei auf meinem 12-Core-Rechner ausführen muss. Wenn alle 150 Aufgaben im Hintergrund ausgeführt werden, verlangsamt sich das System. Aus Erfahrung weiß ich, dass es optimal ist, wenn 12-18 Aufgaben ausgeführt werden.
Früher habe ich die 150 Befehle einfach mit dem Befehl „Split“ in Batchdateien mit jeweils 12 oder 13 Teilen aufgeteilt und dann jeden einzelnen ausgeführt. Allerdings waren einige Batchdateien vor anderen fertig, und am Ende brauchte das Beenden von 3 oder 4 Batchdateien viel länger als bei anderen, während die anderen 9 oder 8 Kerne im Leerlauf waren.
Mein Ziel ist, alle 12 Kerne am Laufen zu halten, bis alle 150 CLI-Befehle ausgeführt sind.
Ist es möglich, dass jeder Prozessor eine Aufgabe aus der CLI-Befehlsliste mit 150 Befehlen auswählt, diesen Befehl als ausgeführt markiert und die anderen 11 Prozessoren ihr eigenes Element auswählen, bis alle 150 fertig sind, ohne dass die Prozessoren sich gegenseitig behindern und denselben CLI-Befehl auswählen? Die Dateischreibvorgänge müssen eindeutig sein.
Gibt es eine einfache Möglichkeit, dies zu tun?
Antwort1
Mit GNU Parallel sieht es folgendermaßen aus:
cat 150commands.txt | parallel
Es wird ein Job pro Kern ausgeführt.
GNU Parallel ist ein allgemeiner Parallelisierer und erleichtert die parallele Ausführung von Jobs auf derselben Maschine oder auf mehreren Maschinen, auf die Sie SSH-Zugriff haben. Es kann häufig eine for
Schleife ersetzen.
Wenn Sie 32 verschiedene Jobs haben, die Sie auf 4 CPUs ausführen möchten, können Sie die Parallelisierung ganz einfach durchführen, indem Sie auf jeder CPU 8 Jobs ausführen:
GNU Parallel startet stattdessen einen neuen Prozess, wenn einer fertig ist – wodurch die CPUs aktiv bleiben und Zeit gespart wird:
Installation
Wenn GNU Parallel nicht für Ihre Distribution gepackt ist, können Sie eine persönliche Installation durchführen, für die kein Root-Zugriff erforderlich ist. Dies ist in 10 Sekunden erledigt, indem Sie Folgendes tun:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Weitere Installationsoptionen finden Sie unterhttp://git.savannah.gnu.org/cgit/parallel.git/tree/README
Erfahren Sie mehr
Weitere Beispiele:http://www.gnu.org/software/parallel/man.html
Sehen Sie sich die Einführungsvideos an:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Gehen Sie das Tutorial durch:http://www.gnu.org/software/parallel/parallel_tutorial.html
Melden Sie sich für die E-Mail-Liste an, um Unterstützung zu erhalten:https://lists.gnu.org/mailman/listinfo/parallel