我正在修补线程,有人可以解释一下这里发生了什么吗?
from multiprocessing import Process
from time import sleep
class Thing(object):
def __init__(self):
print "__init__:", id(self)
self.a = 100
self.b = 200
def run(self):
while True:
sleep(5)
print id(self.a), self.a, '*', id(self.b), self.b
然后我通过打开这个脚本python -i
并执行:
t = Thing()
p = Process(target=t.run)
p.start()
# Thread starts running and reporting IDs every 5 seconds
# if I do..
t.a = 500
# The address of `t.a` changes (using `id()`) and the thread still reports 100.
我理解期望它能够工作意味着一些非常粗略的线程通信,但看起来在某些时候有两个 Thing() 对象,一个对我可用,一个在 Process() 中。什么时候被复制?
最重要的是:
如何更改self.a
INSIDE the的值Process()
?