Parallele Verarbeitung von Bash-Unterprozessen in Python
Das sequentielle Ausführen von Unterprozessen kann die Leistung Ihrer Anwendung beeinträchtigen. Um mehrere Bash-Befehle gleichzeitig auszuführen, können Sie die Threading- und Subprocess-Module in Python nutzen.
Direkte Verwendung von Subprozessen
Threading scheint zwar für die parallele Verarbeitung notwendig zu sein, ist es aber nicht erforderlich. Sie können die Funktion subprocess.Popen verwenden, um Prozesse parallel zu starten:
<code class="python">from subprocess import Popen commands = [ 'date; ls -l; sleep 1; date', 'date; sleep 5; date', 'date; df -h; sleep 3; date', 'date; hostname; sleep 2; date', 'date; uname -a; date', ] # Run commands in parallel processes = [Popen(cmd, shell=True) for cmd in commands] # Perform other tasks while processes run # Wait for completion for p in processes: p.wait()</code>
Gleichzeitige Unterprozesse begrenzen
Um die Anzahl gleichzeitiger Prozesse zu begrenzen, sollten Sie die Verwendung von Multiprocessing in Betracht ziehen .dummy.Pool-Modul, das Multiprocessing mit Threads simuliert:
<code class="python">from functools import partial from multiprocessing.dummy import Pool from subprocess import call pool = Pool(2) # Limit to two concurrent commands # Iterate over commands and return codes for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): if returncode != 0: print("%d command failed: %d" % (i, returncode))</code>
Begrenzung ohne Pools
Sie können die Parallelität auch ohne Thread-Pools einschränken:
<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)) # Start initial processes while running_processes: for i, process in enumerate(running_processes): if process.poll() is not None: # Process has finished running_processes[i] = next(processes, None) # Start new process if running_processes[i] is None: # No new processes del running_processes[i] break</code>
Das obige ist der detaillierte Inhalt vonWie kann ich in Python mehrere Bash-Befehle gleichzeitig ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!