So synchronisieren Sie den Zugriff auf freigegebene Wörterbücher im Multiprocessing
In einer Multiprocessing-Umgebung erfordern möglicherweise mehrere Prozesse Zugriff auf gemeinsam genutzte Daten, z Wörterbuch. Wenn jedoch keine geeigneten Synchronisierungsmechanismen implementiert sind, können Race Conditions auftreten, die zu unzuverlässigen oder beschädigten Daten führen.
Stellen Sie sich ein Szenario vor, in dem mehrere untergeordnete Prozesse auf ein globales Wörterbuch D zugreifen, während sie an einer gemeinsam genutzten Warteschlange Q arbeiten. Zunächst Das Wörterbuch scheint die von den untergeordneten Prozessen geänderten Ergebnisse zu speichern. Sobald jedoch der Hauptprozess Q beitritt, wird das Wörterbuch D leer.
Dieses Problem ergibt sich aus der asynchronen Natur der Mehrfachverarbeitung. Jeder untergeordnete Prozess verfügt über einen eigenen Speicherbereich, und an gemeinsam genutzten Variablen vorgenommene Änderungen sind ohne ordnungsgemäße Synchronisierung möglicherweise nicht sofort für andere Prozesse sichtbar.
Verwenden eines Managerobjekts zur Synchronisierung
Eine gängige Lösung zum Synchronisieren des Zugriffs auf gemeinsam genutzte Daten im Multiprocessing ist die Verwendung eines Manager-Objekts. Ein Manager stellt gemeinsam genutzte Speichersegmente bereit, auf die alle beteiligten Prozesse zugreifen können.
So können Sie die Synchronisierung mit einem Manager implementieren:
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 das Manager-Objekt ein gemeinsam genutztes Wörterbuch d, auf das beide untergeordneten Prozesse zugreifen können. Wenn ein untergeordneter Prozess das Wörterbuch ändert, sind die Änderungen sofort für andere Prozesse sichtbar.
Ausgabe:
$ python mul.py {1: '111', '2': 6}
Diese Ausgabe zeigt, dass das freigegebene Wörterbuch erfolgreich war von den untergeordneten Prozessen synchronisiert und aktualisiert.
Das obige ist der detaillierte Inhalt vonWie vermeide ich Race Conditions beim Teilen von Wörterbüchern im Multiprocessing?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!