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, wie 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 gilt: 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 seinen eigenen Speicherplatz 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 gemeinsames 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 von den untergeordneten Prozessen synchronisiert und aktualisiert wurde.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3