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!