Python: Cat-Unterprozess parallel ausführen
Dieses Skript zielt darauf ab, mehrere cat | auszuführen zgrep-Befehle auf einem Remote-Server ausführen und deren Ausgaben einzeln zur weiteren Verarbeitung erfassen. Allerdings führt die aktuelle Implementierung diese Befehle nacheinander aus, was die Leistung beeinträchtigt.
Um dieses Problem zu beheben, können wir die Leistungsfähigkeit der Parallelität in Python nutzen. Indem wir den Code wie folgt ändern, können wir die Unterprozessaufrufe parallel ausführen und gleichzeitig die Möglichkeit behalten, die Ausgabe für jeden Befehl einzeln zu sammeln:
<code class="python">import asyncio import sys from subprocess import Popen, PIPE, STDOUT # Run commands in parallel processes = [Popen('ssh remote_host cat files_to_process | zgrep --mmap "regex"', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) for _ in range(5)] # Collect outputs in parallel def get_lines(process): return process.communicate()[0].splitlines() outputs = [get_lines(process) for process in processes]</code>
Dieser aktualisierte Code nutzt die Process-Klasse vom Unterprozessmodul bis Erstellen Sie Unterprozesse für jeden Befehl. Anschließend wird die Kommunikationsmethode verwendet, um die Ausgabe jedes Prozesses zu erfassen. Indem wir eine leere Zeichenfolge als Eingabe für den stdin-Parameter bereitstellen, können wir angeben, dass keine Eingabe an den Unterprozess gesendet werden soll.
Das Skript zeigt außerdem, wie man mithilfe einer Listenverständnisliste eine Liste von Prozessen erstellt und a Liste der gleichzeitigen Ausgaben. Dieser Ansatz bietet eine einfachere und prägnantere Implementierung im Vergleich zur Verwendung von Multiprocessing oder Threading.
Darüber hinaus verwendet das Skript den Parameter close_fds, um sicherzustellen, dass die Dateideskriptoren für die untergeordneten Prozesse nach ihrer Verwendung geschlossen werden. Dies trägt dazu bei, potenzielle Ressourcenlecks oder Fehler zu verhindern, wenn die Unterprozesse parallel ausgeführt werden.
Das obige ist der detaillierte Inhalt vonSo führen Sie mehrere „cat |' aus zgrep`-Befehle parallel zu Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!