Die parallele Ausführung von shell-Prozessen
Ist es ein Werkzeug zur Verfügung, führen mehrere Verfahren parallel in einer Windows-batch-Datei? Ich habe einige interessante tools für Linux (parallel und PPSS), jedoch bräuchte ich ein tool für Windows-Plattformen.
Bonus: Es wäre toll, wenn das tool erlaubt auch zum verteilen von Prozessen auf einfache Art und Weise zwischen mehreren Maschinen, laufen die Prozesse aus der Ferne a la PsExec.
Beispiel: ich möchte, dass in der folgenden for-Schleife
for %F in (*.*) do processFile.exe %F
eine begrenzte Menge von Instanzen processFile.exe laufen parallel zu nutzen multi-core-CPUs.
InformationsquelleAutor Dirk Vollmar | 2009-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
GNU-xargs unter Linux hat ein "P-n" - Schalter, um starten Sie "n" - Prozesse parallel.
Vielleicht cygwin/mingw-build von xargs auch unterstützt?
Dann können Sie verwenden:
Keine Lust multi-node-Prozess Laich, obwohl.
Was ist der Windows-batch-Mechanismus?
href="http://stackoverflow.com/questions/11010834/how-to-run-multiple-dos-commands-in-parallel" Titel="wie laufen die mehrere dos-Befehle parallel">stackoverflow.com/questions/11010834/... Siehe auch die Antwort von @guerda unten.
start
ist nicht flexibel, aber.InformationsquelleAutor ADEpt
Bearbeiten - ich geändert, das Skript wahlweise Anzeige der Ausgabe jedes Prozesses
Hier ist eine native batch-Lösung, die zuverlässig läuft, eine Liste von Befehlen parallel, nie starten mehr als n Prozesse auf einmal.
Es hat sogar einen Mechanismus eingebaut, um das verteilen der Prozesse an bestimmte CPUs oder remote-Rechnern per PSEXEC, aber habe ich noch nicht getestet Funktion.
Den trick, um diese Arbeit zu BEGINNEN Sie jeden Befehl durch einen CMD-Prozess, leitet entweder auf stdout oder in eine Undefinierte Griff zu einer lock-Datei. Der Prozess wird pflegen eine exklusive Sperre auf die Datei, bis es beendet wird. Es ist egal, wie der Prozess beendet wird (normal beenden, Absturz getötet-Prozess), die sperren werden freigegeben, sobald es das tut.
Dem master-Skript prüfen kann, ob der Prozess noch aktiv ist, indem Sie versuchen, redirect auf die gleiche lock-Datei. Die Umleitung fehlschlägt, wenn der Prozess noch aktiv ist, erfolgreich ist, wenn er gekündigt hat.
Standardmäßig wird das Skript ignoriert den Ausgang der einzelnen Verfahren. Wenn begann mit der
/O
option als 1. parameter, dann zeigt es den Ausgang eines jeden Prozesses, der ohne interleaving.Mein demo setzt das Prozess-limit auf 4, und führt einfach eine Reihe von PING-Befehle von unterschiedlicher Länge.
Getestet hab ich das auf XP, Vista und Windows 7.
Hier ist die Ausgabe aus einer Probe ausgeführt, der ignoriert Prozess Ausgabe
Hier ist die Ausgabe, wenn die Ausführung mit der
/O
option zeigt Prozess-output -InformationsquelleAutor dbenham
Versuchen
start
:Es öffnet sich ein neues Fenster mit dem angegebenen Titel und führt die BAT -, CMD-oder EXE-Datei. Sie können auch die Priorität festlegen, legen Sie die gleiche Umgebung etc.
Dateien, die nicht ausführbar sind mit dem verknüpften Programm geöffnet.
Weiter Lesen: Start -> Ausführen
Starten ist mindestens seit WinME.
Glück!
Du bist herzlich willkommen. Versuchen Sie Johannes' Antwort. Wie es scheint, gibt es einige mehr 🙂
InformationsquelleAutor guerda
Klingt wie Sie verwenden möchten Powershell 2. Sie können jedoch spawnen neue
cmd
windows (oder einem anderen Verfahren) durch die Verwendungstart
finden Sie auch diese Antwort. Obwohl Sie wahrscheinlich haben, um einige andere tools und ein wenig Trickserei zu erstellen, so etwas wie eine "Prozess-pool" zu haben, nur maximal n Instanzen gleichzeitig ausführen). Sie konnte erreichen, letzteres durch die Verwendungtasklist /im
und zählen, wie viele sind schon da (for
Schleife oderwc
, wenn zutreffend) und einfach warten (ping -n 2 ::1 >nul 2>&1
) und überprüfen Sie erneut, ob Sie laichen können einen neuen Prozess.Habe ich zusammengeschustert einen kleinen test-Stapel für das:
Laicht maximal vier neue Prozesse, die parallel ausgeführt werden und minimiert. Die Wartezeit eingestellt werden muss wohl, je nach dem, wie viel jeder Prozess hat und wie lange es läuft. Sie haben wahrscheinlich auch anpassen müssen, um den Namen des Prozesses, für die tasklist ist auf der Suche, wenn Sie etwas anderes tun.
Gibt es keinen Weg, um richtig zählen die Prozesse, die erzeugt werden durch diesen batch, obwohl. Eine Möglichkeit wäre, eine zufällige Zahl zu Beginn der Partie (
%RANDOM%
) und erstellen Sie einen Helfer batch, der die Verarbeitung (oder erstellt das processing-Programm), aber die kann das Fenster Titel parameter:Wäre dies eine einfache batch, legt sein Titel um den ersten parameter, und dann läuft der zweite parameter mit dem Dritten als argument. Sie können dann filtern Sie in der Jobliste durch die Auswahl von nur Prozesse mit dem angegebenen Fenstertitel (
tasklist /fi "windowtitle eq ..."
). Diese Arbeit sollte sehr zuverlässig und verhindert, dass zu viele false positives. Suche fürcmd.exe
wäre eine schlechte Idee, wenn Sie noch einige Instanzen, wie die Grenzen Ihrer pool von worker-Prozessen.Können Sie
%NUMBER_OF_PROCESSORS%
zu erstellen, die eine sinnvolle Vorgabe, wie viele Instanzen, um zu laichen.Können Sie auch leicht anpassen, diese zu verwenden
psexec
zu laichen, die Prozesse aus der Ferne (aber nicht sehr tragfähig, da Sie admin-Rechte auf dem anderen Rechner auch das Passwort in der batch). Sie müssten verwenden Sie Prozess-Namen für die Filterung dann, wenn.InformationsquelleAutor Joey
Es ist eine grundlegende Windows xargs-wie-Klonen, die nicht die Unterstützung der-P-option "Parallelverarbeitung" bei http://www.pirosa.co.uk/demo/wxargs/wxargs.html
InformationsquelleAutor PP.