Heim  >  Artikel  >  Backend-Entwicklung  >  So führen Sie mehrere „cat |' aus zgrep`-Befehle parallel zu Python?

So führen Sie mehrere „cat |' aus zgrep`-Befehle parallel zu Python?

DDD
DDDOriginal
2024-10-29 13:47:02421Durchsuche

 How to Execute Multiple `cat | zgrep` Commands in Parallel with Python?

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!

Stellungnahme:
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