Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann der Fehler „Warteschlangenobjekte sollten nur durch Vererbung von Prozessen gemeinsam genutzt werden“ bei der Mehrfachverarbeitung behoben werden?

Wie kann der Fehler „Warteschlangenobjekte sollten nur durch Vererbung von Prozessen gemeinsam genutzt werden“ bei der Mehrfachverarbeitung behoben werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-19 18:48:30600Durchsuche

How to Resolve the

Gemeinsame Warteschlangen mit Multiprocessing verwalten

Im Multiprocessing-Modul von Python erfordert die Erstellung einer gemeinsamen Warteschlange zwischen Prozessen sorgfältige Überlegungen bei der Verwendung von multiprocessing.apply_async() um asynchrone Arbeitsprozesse zu starten. „Warteschlangenobjekte sollten nur durch Vererbung zwischen Prozessen geteilt werden.“ Beim Versuch, eine Warteschlange direkt an Arbeiter zu übergeben, tritt ein Fehler auf.

Um dieses Problem zu beheben, verwenden Sie multiprocessing.Manager, um die Warteschlange zu verwalten und sie für Arbeiterprozesse zugänglich zu machen. multiprocessing.Manager bietet Methoden zum Erstellen von Managerobjekten, die verschiedene Datentypen in einem gemeinsam genutzten Speichersegment steuern und serialisieren.

Der folgende Codeausschnitt zeigt, wie eine Warteschlange mithilfe von multiprocessing.Manager für mehrere Arbeitsprozesse freigegeben wird:

<code class="python">import multiprocessing

def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    m = multiprocessing.Manager()
    q = m.Queue()
    workers = pool.apply_async(worker, (33, q))</code>

In diesem Beispiel erstellt multiprocessing.Manager() ein Manager-Objekt (m), das gemeinsam genutzte Daten verwaltet und Proxy-Objekte bereitstellt, die an Arbeitsprozesse übergeben werden können. Durch den Aufruf von m.Queue() erstellen wir eine vom Manager verwaltete Warteschlange, auf die alle Arbeitsprozesse zugreifen können. Der Manager serialisiert dann das Proxy-Objekt und übergibt es an den Worker, sodass dieser sicher mit der gemeinsam genutzten Warteschlange kommunizieren kann.

Das obige ist der detaillierte Inhalt vonWie kann der Fehler „Warteschlangenobjekte sollten nur durch Vererbung von Prozessen gemeinsam genutzt werden“ bei der Mehrfachverarbeitung behoben werden?. 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