2

我正在修补线程,有人可以解释一下这里发生了什么吗?

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.aINSIDE the的值Process()

4

1 回答 1

1

在这种情况下,您使用的是进程而不是线程,因此您需要进程间通信。您可以使用队列来实现这一点。请参阅http://docs.python.org/dev/library/multiprocessing.html,查找 17.2.1.3。在进程之间交换对象。

于 2013-08-16T11:41:30.903 回答