Общее состояние в многопроцессорных процессах

Пожалуйста, рассмотрите этот код:

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()

Это дает в выходной

self.id = A
self.id = B
self.id = A

Тем не менее, я ожидал, что это даст

self.id = A
self.id = B
self.id = B

..потому что h.id уже был изменен на "B" к моменту вызова триггерного метода.

Кажется, что копия экземпляра хоста создается в момент запуска отдельного процесса, поэтому изменения в исходном хосте не влияют на эту копию.

В моем проекте (конечно, более сложном) поля экземпляра хоста время от времени изменяются, и важно, чтобы события, запускаемые кодом, выполняющимся в отдельном процессе, имели доступ к этим изменениям.

Ответы на вопрос(1)

Ваш ответ на вопрос