Wie kann ich gnuparallel dazu zwingen, einen Befehlssatz sequentiell auszuführen?

562
Mr Purple

Gnu Parallel ist ein leistungsstarkes Werkzeug, mit dem ich viele unabhängige BASH-Befehle als einen einzigen Satz parallel ausführen kann. Ich möchte in der Lage sein, dieselben Befehle SEQUENTIALLY ohne wesentliche Änderungen an dem von mir verwendeten Befehl auszuführen. Ich weiß, dass es einen Schalter gibt, um die Ausgabe zu zwingen, als THOUGH sequentiell ausgeführt zu werden, aber ich möchte gnuparallel ACTUALLY RUN nacheinander haben. Mein Grund ist für Testzwecke auf einer Maschine, die tendenziell überhitzt. Die Lösung meines Hardwareproblems ist keine Option. Außerdem könnte man sich andere Testregime vorstellen, für die gnuparallel nacheinander ausgeführt werden kann.

So. Gibt es eine Möglichkeit, gnuparallel einfach sequentiell auszuführen, oder müsste ich den Befehlssatz gnuparallel manuell in seine Komponentenbefehle auspacken und diese der Reihe nach ausführen?

2
Wenn der Zweck des Programms darin besteht, die Parallelität von Kernen / Threads zu nutzen, untergräbt es irgendwie den Punkt, es aufzufordern, sich seriell zu verhalten. Wenn Sie möchten, dass die Befehle seriell ausgeführt werden, können Sie sie ohne Parallelisierung skripten. killermist vor 9 Jahren 0
@killermist Wenn Sie einen langen Befehl haben, den Sie jeweils mit einem Argument angeben möchten, ihn aber seriell ausführen möchten, ist es möglicherweise kürzer, den Befehl mit GNU Parallel zu erstellen. Ole Tange vor 9 Jahren 1
Heh. Ich verwende dazu bash-for-Loops. `für Argument in diesem anderen etwas; do / usr / bin / somecommand --flaghere "$ argument" other _ "$ argument"; fertig `Einfach. killermist vor 9 Jahren 0
@OleTange hat die Idee. Sie möchten möglicherweise, dass ihre Prozesse nacheinander ausgeführt werden, aber dennoch die leistungsstarke Syntax von GNU Parallel verwenden möchten. Mr Purple vor 9 Jahren 0
@killermist Hier mit GNU Parallel: `parallel / usr / bin / somecommand --flaghere {} other_ {} ::: das dieses andere etwas` # Etwas kürzer und weniger zitiert Ole Tange vor 9 Jahren 0

1 Antwort auf die Frage

3
garyjohn

Die parallelManpage sagt, dass die --jobsOption ( die gleiche wie -j, --max-procsund -P) gibt die Anzahl der Jobs parallel ausgeführt werden . Wenn Sie parallelmit ausführen, --jobs 1sollten Ihre Jobs nacheinander ausgeführt werden.

Ich dachte, es würde einen Wechsel geben, hatte aber die Optionen aus Ihrer Perspektive nicht betrachtet. Diese Lösung ermöglicht eine dynamische Auswahl der Anzahl gleichzeitig ausgeführter Prozesse. Es beantwortet meine Frage noch besser als ich gehofft hatte. Mr Purple vor 9 Jahren 0
Für zusätzliche Dynamik verwenden Sie `-j file` und ändern den Inhalt von` file`, während GNU Parallel läuft. Ole Tange vor 9 Jahren 0
Ich habe jedoch die Erfahrung gemacht, dass `-j1` nicht nur die Anzahl der parallelen Jobs auf 1 beschränkt, sondern auch den aktuell laufenden Job auf einen einzelnen Kern beschränkt. Beim Ausführen desselben Jobs auf meinem Computer werden alle verfügbaren Kerne verwendet. Kann ich die sequentielle Ausführung irgendwie erzwingen, aber jedem Job die parallele Verwendung mehrerer Kerne gestatten? CGFoX vor 6 Jahren 0