


Wie kann ich mehrere Unterprozesse parallel ausführen und ihre Ausgabe sammeln, ohne Multiprocessing oder Threading in Python zu verwenden?
Unterprozesse parallel zur Ausgabesammlung ausführen
Im gegebenen Szenario werden mehrere cat | Zgrep-Befehle werden nacheinander auf einem Remote-Server ausgeführt. Um diese Befehle gleichzeitig auszuführen und gleichzeitig einzelne Ausgaben zu sammeln, müssen wir die Verwendung von Multiprocessing oder Threading vermeiden.
Eine einfache Lösung besteht darin, die Popen-Funktion aus dem Unterprozessmodul zu verwenden. Indem wir für jeden Befehl individuelle Popen-Objekte erstellen und ihnen ein Shell-Argument übergeben, können wir sie parallel ausführen. Sobald die Befehle abgeschlossen sind, können wir ihre Exit-Codes mithilfe der Wait-Methode sammeln. Hier ist ein Beispiel:
<code class="python">from subprocess import Popen # Create a list of commands commands = ['echo {i:d}; sleep 2; echo {i:d}' for i in range(5)] # Run commands in parallel processes = [Popen(command, shell=True) for command in commands] # Collect statuses exitcodes = [p.wait() for p in processes]</code>
Dieser Code führt die fünf Befehle gleichzeitig aus und sammelt ihre Exit-Codes, sobald sie abgeschlossen sind.
Um die Ausgabe der Befehle zu sammeln, können wir Threads oder verwenden die Kommunikationsmethode in einem separaten Prozess. Beispiel: Verwendung eines Thread-Pools:
<code class="python">from multiprocessing.dummy import Pool # thread pool from subprocess import Popen # Run commands in parallel processes = [Popen(command, shell=True, close_fds=True) for command in commands] # Collect output in parallel def get_output(process): return process.communicate()[0] outputs = Pool(len(processes)).map(get_output, processes)</code>
Dieser Code führt alle Befehle gleichzeitig in einem Thread-Pool aus und sammelt ihre Ausgabe in einer Liste, in der jedes Element der Ausgabe eines einzelnen Befehls entspricht.
Eine weitere Alternative besteht darin, das Asyncio-Modul für die Ausgabesammlung im selben Thread zu verwenden (Python 3.8 und höher):
<code class="python">import asyncio from subprocess import PIPE async def get_output(command): process = await asyncio.create_subprocess_shell(command, stdout=PIPE) return (await process.communicate()[0]).decode() # Get commands output in parallel coros = [get_output(command) for command in commands] outputs = await asyncio.gather(*coros)</code>
Dieser Code erstellt Coroutinen, die die Befehle gleichzeitig ausführen und ihre Ausgaben als Liste zurückgeben.
Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Unterprozesse parallel ausführen und ihre Ausgabe sammeln, ohne Multiprocessing oder Threading in Python zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

So herunterladen Sie Dateien in Python

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Einführung des natürlichen Sprach -Toolkits (NLTK)

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?
