Multiprocessing-Warteschlangen und Pipes verwenden

Kommunikation zwischen Prozessen in Python

Lernen Sie, wie Sie mehrere Prozesse effektiv koordinieren können, indem Sie Pythons Mehrfach verarbeitende Warteschlangen, Pipes und Shared-Memory-Objekte nutzen. Dieser Leitfaden enthält praktische Beispiele und Best Practices für die prozessübergreifende Kommunikation.

Programmierung
Autor:in
Zugehörigkeit
Veröffentlichungsdatum

5. Februar 2024

Geändert

29. April 2025

Schlüsselwörter

Mehrfach verarbeitende Warteschlangen, Mehrprozessor-Pipes, Python-Kommunikation zwischen Prozessen, Gemeinsamer Speicher Python, Mehrprozessor-IPC

Einführung

Bei der Arbeit mit dem Multiprocessing-Modul von Python ist die Koordinierung der Kommunikation zwischen den Prozessen entscheidend für die Entwicklung effizienter paralleler Anwendungen. In diesem Tutorial werden wir die Inter-Prozess-Kommunikation (IPC) mit Hilfe von Warteschlangen und Pipes erforschen und auf Shared-Memory-Objekte als ergänzenden Ansatz eingehen. Sie lernen, wie Sie diese Werkzeuge einsetzen, um Daten zwischen Prozessen effektiv auszutauschen und häufige Fallstricke zu vermeiden.



Mehrfach verarbeitende Warteschlangen

Warteschlangen sind ein thread- und prozesssicherer Weg, um Daten zwischen Prozessen auszutauschen. Sie ermöglichen es, Daten in einem Prozess in eine Warteschlange zu stellen und sie in einem anderen Prozess wieder zu entfernen.

Beispiel: Eine Warteschlange verwenden

import multiprocessing

def worker(q):
    # Eine Nachricht in die Warteschlange stellen
    q.put("Hello from worker!")

if __name__ == "__main__":
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=worker, args=(q,))
    p.start()
    # Holen Sie die Nachricht aus der Warteschlange ab
    message = q.get()
    print("Message from worker:", message)
    p.join()
Hinweis

Warteschlangen handhaben die Synchronisierung intern, was sie zu einer bequemen Wahl für die Kommunikation zwischen Prozessen ohne zusätzliche Sperrmechanismen macht.

Multiprozessor-Pipes

Pipes bieten einen bidirektionalen Kommunikationskanal zwischen zwei Prozessen. Sie sind einfacher als Warteschlangen, werden aber typischerweise für Punkt-zu-Punkt-Kommunikation verwendet.

Beispiel: Verwendung einer Pipe

import multiprocessing

def worker(conn):
    # Senden einer Nachricht durch die Pipe
    conn.send("Hello from worker!")
    conn.close()

if __name__ == "__main__":
    parent_conn, child_conn = multiprocessing.Pipe()
    p = multiprocessing.Process(target=worker, args=(child_conn,))
    p.start()
    # Empfangen Sie die Nachricht aus der Pipe
    message = parent_conn.recv()
    print("Message from worker:", message)
    p.join()
Tipp

Pipes sind ideal für einfache, direkte Kommunikation zwischen zwei Prozessen, aber für komplexere Szenarien mit mehreren Produzenten und Konsumenten sind Warteschlangen oft vorzuziehen.

Gemeinsam genutzte Speicher-Objekte

Zusätzlich zu Warteschlangen und Pipes bietet Python gemeinsam genutzte Speicherobjekte (wie multiprocessing.Value und multiprocessing.Array), um Daten zwischen Prozessen auszutauschen, ohne dass eine Serialisierung erforderlich ist. Dies kann den Kommunikations-Overhead reduzieren.

Beispiel: Einen Shared Value verwenden

import multiprocessing

def increment(shared_val):
    # Verwenden Sie eine Sperre, um Race Conditions zu verhindern
    with shared_val.get_lock():
        shared_val.value += 1

if __name__ == "__main__":
    shared_val = multiprocessing.Value('i', 0)
    processes = []
    for _ in range(5):
        p = multiprocessing.Process(target=increment, args=(shared_val,))
        processes.append(p)
        p.start()
    for p in processes:
        p.join()
    print("Final value:", shared_val.value)
Warnung

Bei der Verwendung von Shared-Memory-Objekten sollten Sie immer Sperren oder andere Synchronisationsmechanismen verwenden, um Race Conditions zu vermeiden.

Schlussfolgerung

Die prozessübergreifende Kommunikation ist ein wichtiger Aspekt bei der Entwicklung robuster Multiprozessing-Anwendungen. Warteschlangen und Pipes bieten einfache Möglichkeiten für den Datenaustausch zwischen Prozessen, während Shared-Memory-Objekte eine effiziente Lösung für die gemeinsame Nutzung großer Datenstrukturen ohne übermäßigen Overhead darstellen. Wenn Sie diese Werkzeuge verstehen und anwenden, können Sie Python-Anwendungen entwerfen, die sowohl effizient als auch skalierbar sind.

Weiterführende Literatur

Viel Spaß beim Kodieren, und mögen Ihre Prozesse effizient kommunizieren!

Weitere Artikel erkunden

Hinweis

Hier finden Sie weitere Artikel aus derselben Kategorie, die Ihnen helfen, tiefer in das Thema einzutauchen.

placeholder

placeholder
Keine Treffer
Zurück nach oben

Wiederverwendung

Zitat

Mit BibTeX zitieren:
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Multiprocessing-Warteschlangen und Pipes verwenden},
  date = {2024-02-05},
  url = {https://www.datanovia.com/de/learn/programming/python/advanced/parallel-processing/multiprocessing-queues-and-pipes.qmd},
  langid = {de}
}
Bitte zitieren Sie diese Arbeit als:
Kassambara, Alboukadel. 2024. “Multiprocessing-Warteschlangen und Pipes verwenden.” February 5, 2024. https://www.datanovia.com/de/learn/programming/python/advanced/parallel-processing/multiprocessing-queues-and-pipes.qmd.