Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Bash-Unterprozesse parallel zu Python ausführen?
Parallele Verarbeitung mit Bash-Unterprozessen in Python
Das parallele Ausführen von Bash-Unterprozessen ist eine häufige Aufgabe bei der Skripterstellung und Automatisierung. In Python können Sie das Unterprozessmodul verwenden, um neue Prozesse zu erzeugen, und das Threading-Modul, um sie gleichzeitig auszuführen.
Die in der ersten Antwort auf die vom Benutzer verknüpfte Frage beschriebene Technik führt jedoch zu einer sequentiellen Ausführung von Bash-Prozesse. Um sie parallel auszuführen, verwenden Sie die folgenden Ansätze:
1. Verwendung von multiprocessing.dummy.Pool:
Für die parallele Ausführung mit einer begrenzten Anzahl gleichzeitiger Prozesse können Sie multiprocessing.dummy.Pool verwenden. Es bietet eine Thread-basierte Schnittstelle ähnlich multiprocessing.Pool.
<code class="python">import multiprocessing.dummy as mp from subprocess import call pool = mp.Pool(2) # Set the maximum number of concurrent commands for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): if returncode != 0: print("%d command failed: %d" % (i, returncode))</code>
2. Verwendung von Unterprozessen mit manueller Parallelitätskontrolle:
Sie können die Anzahl gleichzeitiger Prozesse begrenzen, ohne Thread- oder Prozesspools zu verwenden.
<code class="python">from subprocess import Popen from itertools import islice max_workers = 2 processes = (Popen(cmd, shell=True) for cmd in commands) running_processes = list(islice(processes, max_workers)) while running_processes: # Check for completed processes and start new ones for i, process in enumerate(running_processes): if process.poll() is not None: running_processes[i] = next(processes, None) if running_processes[i] is None: del running_processes[i] break</code>
3. Unterprozesse mit os.waitpid() verwenden (nur Unix):
Auf Unix-Systemen können Sie os.waitpid(-1, 0) verwenden, um zu blockieren und darauf zu warten, dass ein untergeordneter Prozess beendet wird. Dadurch entfällt die Notwendigkeit einer Besetztschleife.
Diese Methoden bieten flexible Optionen zur Steuerung der Parallelität in Bash-Unterprozessen mit Python.
Das obige ist der detaillierte Inhalt vonWie kann ich Bash-Unterprozesse parallel zu Python ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!