Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich ein Wörterbuch zwischen mehreren Prozessen in Python teilen und ändern?

Wie kann ich ein Wörterbuch zwischen mehreren Prozessen in Python teilen und ändern?

Susan Sarandon
Susan SarandonOriginal
2024-11-14 17:44:02710Durchsuche

How to Share and Modify a Dictionary Between Multiple Processes in Python?

Mehrfachverarbeitung: Wörterbuchfreigabe zwischen Prozessen

Stellen Sie sich ein Szenario vor, in dem mehrere Prozesse in einer gemeinsam genutzten Warteschlange Q arbeiten und ein globales Wörterbuch bearbeiten , D. Überraschenderweise wird beim Zugriff auf D nach dem Beitritt zu Q trotz beobachteter Änderungen in untergeordneten Prozessen ein leeres Wörterbuch angezeigt.

Dieses Verhalten rührt von Synchronisierungsproblemen her. Jeder Prozess arbeitet in seinem eigenen Speicherbereich und Änderungen, die in untergeordneten Prozessen an D vorgenommen werden, werden nicht automatisch im Hauptprozess widergespiegelt. Um dies zu beheben, sind Synchronisierungsmaßnahmen erforderlich.

Lösung: Verwendung eines Manager-Objekts

Die Python-Standardbibliothek bietet eine Lösung mithilfe des Manager-Objekts. Dieses Objekt bietet synchronisierten Zugriff auf gemeinsame Daten zwischen Prozessen:

from multiprocessing import Process, Manager

def f(d):
    d[1] += '1'
    d['2'] += 2

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    d[1] = '1'
    d['2'] = 2

    p1 = Process(target=f, args=(d,))
    p2 = Process(target=f, args=(d,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print(d)

In diesem Beispiel erstellt die dict()-Methode des Manager-Objekts ein gemeinsames Wörterbuch d, auf das alle Prozesse zugreifen können. Änderungen, die innerhalb der untergeordneten Prozesse an d vorgenommen werden, werden über den vom Manager-Objekt verwalteten gemeinsamen Speicher an den Hauptprozess weitergegeben.

Ausgabe:

$ python mul.py
{1: '111', '2': 6}

Das obige ist der detaillierte Inhalt vonWie kann ich ein Wörterbuch zwischen mehreren Prozessen in Python teilen und ändern?. 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