对象方法作为多处理。进程目标

时间:2013-08-16 11:30:02

标签: python multiprocessing

我正在修补线程,是否有人能够了解这里发生的事情?

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()的价值?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您使用的是进程而非线程,因此您需要进程间通信。你可以通过队列实现这一目标。见http://docs.python.org/dev/library/multiprocessing.html,查看17.2.1.3。在进程之间交换对象。