我正在修补线程,是否有人能够了解这里发生的事情?
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
内的Process()
的价值?
答案 0 :(得分:1)
在这种情况下,您使用的是进程而非线程,因此您需要进程间通信。你可以通过队列实现这一目标。见http://docs.python.org/dev/library/multiprocessing.html,查看17.2.1.3。在进程之间交换对象。