Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann eine Warteschlange zwischen mehreren asynchronen Arbeitsprozessen im Multiprocessing geteilt werden?

Wie kann eine Warteschlange zwischen mehreren asynchronen Arbeitsprozessen im Multiprocessing geteilt werden?

Barbara Streisand
Barbara StreisandOriginal
2024-10-19 18:42:02873Durchsuche

How to Share a Queue Between Multiple Asynchronous Worker Processes in Multiprocessing?

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!

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