Wie erzeugt man parallele Bash-Prozesse mit Pythons Threading- und Unterprozessmodulen?
Ursprüngliche Frage:
Wie kann ich die Threading- und Subprozessmodule von Python verwenden, um parallele Bash-Prozesse zu erstellen? Eine aufeinanderfolgende Ausführung erfolgt anstelle einer parallelen Ausführung, wenn Threads initiiert werden, wie in dieser Stack Overflow-Antwort beschrieben.
Antwort:
Entgegen der ursprünglichen Annahme sind Threads nicht erforderlich Parallele Ausführung des Bash-Unterprozesses. Die folgenden Techniken bieten verschiedene Optionen:
Direkte Ausführung (ohne Threads):
<code class="python">from subprocess import Popen commands = ['date; ls -l; sleep 1; date', ...] processes = [Popen(cmd, shell=True) for cmd in commands]</code>
Begrenzte gleichzeitige Befehle unter Verwendung von Threads mit multiprocessing.dummy.Pool:
<code class="python">from functools import partial from multiprocessing.dummy import Pool from subprocess import call pool = Pool(2) for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): ...</code>
Gleichzeitige untergeordnete Prozesse ohne Prozesspool begrenzen:
<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: ...</code>
Hinweis für Unix-Systeme:
Vermeiden Sie auf Unix-Plattformen die Besetztschleife, indem Sie os.waitpid(-1, 0) blockieren, um auf das Beenden eines untergeordneten Prozesses zu warten.
Das obige ist der detaillierte Inhalt vonWie erreicht man eine echte parallele Bash-Prozessausführung in Python, ohne auf Threads angewiesen zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!