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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage