Wie kann ich Bash-Unterprozesse parallel zu Python ausführen?

DDD
Freigeben: 2024-10-27 03:00:03
Original
396 Leute haben es durchsucht

How Can I Execute Bash Subprocesses in Parallel with Python?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!