Ergebnisse über mehrere Prozesse hinweg teilen
Beim Multiprocessing kann die gemeinsame Nutzung von Ressourcen, wie z. B. Warteschlangen, zwischen verschiedenen Prozessen eine Herausforderung darstellen. In diesem Artikel wird erläutert, wie Sie mithilfe der Funktion „apply_async“ eine Ergebniswarteschlange für mehrere asynchrone Arbeitsprozesse freigeben.
Der bereitgestellte Beispielcode mit multiprocessing.Process schlägt aufgrund der Einschränkung der prozessübergreifenden gemeinsamen Nutzung von Warteschlangenobjekten durch Vererbung fehl. Um diese Einschränkung zu überwinden, bietet die Klasse multiprocessing.Manager eine Lösung.
Verwendung von multiprocessing.Manager
multiprocessing.Manager bietet eine Möglichkeit, Objekte zu erstellen und zu verwalten, die sein können prozessübergreifend geteilt. Der folgende Code zeigt, wie man Manager verwendet, um eine Warteschlange zwischen Arbeitsprozessen zu teilen:
<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>
Durch die Verwendung von m.Queue() anstelle von multiprocessing.Queue() wird die Warteschlange vom Manager-Objekt erstellt und verwaltet . Dadurch können die Arbeitsprozesse auf die Warteschlange zugreifen und diese ändern, ohne dass der Fehler „Warteschlangenobjekte sollten nur durch Vererbung von Prozessen gemeinsam genutzt werden“ auftritt.
Das obige ist der detaillierte Inhalt vonWie kann eine Warteschlange zwischen mehreren asynchronen Arbeitsprozessen im Multiprocessing geteilt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!