Programme parallel mit Xargs ausführen
Momentan habe ich das aktuelle Skript.
#!/bin/bash
# script.sh
for i in {0..99}; do
script-to-run.sh input/ output/ $i
done
Ich wünschte, es laufen parallel mit xargs. Ich habe versucht
script.sh | xargs -P8
Aber dabei die oben nur einmal ausgeführt zu der Zeit. Kein Glück mit -n8 als gut.
Hinzufügen & am Ende der Linie ausgeführt werden in dem Skript for-Schleife versuchen würde, um das Skript auszuführen 99 mal auf einmal. Wie führe ich die Schleife nur 8 an die Zeit, bis zu insgesamt 100.
InformationsquelleAutor der Frage Olivier | 2015-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der
xargs
Mann Seite:Was bedeutet, dass für dein Beispiel
xargs
warten und sammeln Sie alle den Ausgang aus dem Skript und dann läuftecho <that output>
. Nicht gerade besonders nützlich, noch was Sie wollte.Den
-n
argument ist, wie viele items aus der input-zur Verwendung mit jedem Befehl, der ausgeführt wird (nichts von sich aus über die Parallelität hier).Tun, was Sie wollen mit
xargs
Sie tun müssen, würde so etwas wie dies (ungetestet):Bricht nach wie diese.
printf %s\\n {0..99}
- Drucken Sie eine Nummer pro Zeile aus0
zu99
.xargs
InformationsquelleAutor der Antwort Etan Reisner
Mit GNU Parallel würden Sie tun:
Fügen Sie in
-P8
wenn Sie nicht möchten, führen Sie einen job pro CPU-Kern.Gegenüber
xargs
es wird schon Das Richtige tun, auch wenn die Eingabe enthalten das Leerzeichen, "oder" (hier nicht der Fall, obwohl). Es macht auch sicher, dass die Ausgabe von verschiedenen Arbeitsplätzen sind nicht miteinander vermischt, also, wenn Sie die Ausgabe, die Sie sind garantiert, dass Sie nicht eine halbe Zeile, die aus zwei verschiedenen jobs.GNU Parallel ist ein Allgemeines parallelizer und macht ist einfach Aufträge ausführen, die parallel auf der gleichen Maschine oder auf mehreren Maschinen, die Sie haben ssh-Zugang zu.
Wenn Sie 32 verschiedene jobs, die Sie ausführen möchten, auf 4 CPUs, ein straight forward Weg zu parallelisieren ist zum ausführen von 8 jobs auf jeder CPU:
GNU Parallel statt erzeugt einen neuen Prozess, wenn eine Oberflächen - halten die CPUs aktiv und somit Zeit sparen:
Installation
Wenn GNU Parallel ist nicht als Paket für Ihre distribution, die Sie tun können, eine persönliche installation, die nicht erfordert root-Zugriff. Es kann getan werden, in 10 Sekunden durch, dies zu tun:
Für andere Installationsoptionen finden Sie unter http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Erfahren Sie mehr
Siehe weitere Beispiele: http://www.gnu.org/software/parallel/man.html
Uhr die intro-videos: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Spaziergang durch das tutorial: http://www.gnu.org/software/parallel/parallel_tutorial.html
Melden Sie sich für den E-Mail-Liste, um Unterstützung zu bekommen: https://lists.gnu.org/mailman/listinfo/parallel
InformationsquelleAutor der Antwort Ole Tange