Heim >Backend-Entwicklung >Python-Tutorial >Wie kann der Fehler „Warteschlangenobjekte sollten nur durch Vererbung von Prozessen gemeinsam genutzt werden' bei der Mehrfachverarbeitung behoben werden?
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!