Freigegebener Status in Multiprozessor-Prozessen
Bitte beachten Sie diesen Code:
import time
from multiprocessing import Process
class Host(object):
def __init__(self):
self.id = None
def callback(self):
print "self.id = %s" % self.id
def bind(self, event_source):
event_source.callback = self.callback
class Event(object):
def __init__(self):
self.callback = None
def trigger(self):
self.callback()
h = Host()
h.id = "A"
e = Event()
h.bind(e)
e.trigger()
def delayed_trigger(f, delay):
time.sleep(delay)
f()
p = Process(target = delayed_trigger, args = (e.trigger, 3,))
p.start()
h.id = "B"
e.trigger()
Dies gibt in Ausgabe
self.id = A
self.id = B
self.id = A
Allerdings habe ich erwartet, dass es @ geb
self.id = A
self.id = B
self.id = B
.. weil die h.id zum Zeitpunkt des Aufrufs der Triggermethode bereits auf "B" geändert wurde.
Es scheint, dass eine Kopie der Host-Instanz zu dem Zeitpunkt erstellt wird, an dem der separate Prozess gestartet wird, sodass die Änderungen am ursprünglichen Host diese Kopie nicht beeinflussen.
In meinem Projekt (natürlich aufwändiger) werden die Felder der Hostinstanz von Zeit zu Zeit geändert, und es ist wichtig, dass die Ereignisse, die durch den Code ausgelöst werden, der in einem separaten Prozess ausgeführt wird, Zugriff auf diese Änderungen haben.