使用python中的multiprocessing.Manager在进程之间共享数据

时间:2012-07-11 12:44:32

标签: python multiprocessing shared-objects

以下是来自http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes

的调整示例
from multiprocessing import Process, Manager

def f(d):
    print d                 # 1
    print type(d)

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    p = Process(target=f, args=(d))
    p.start()
    p.join()

我正在尝试做类似

的事情
from multiprocessing import Process, Manager
class abcd(Process):

    def __init__(self,d):
        Process.__init__(self)
        self.d = d
        print self.d            # 2
        print type(self.d)

    def run(self):
        print self.d            # 3
        print type(self.d)

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()

    proc = abcd(d)
    proc.start()

实际上令我不安的是,在标记为1和2的行中,我得到了我期望的{} - 空白词典。但在第3行打印

<DictProxy object, typeid 'dict' at 0x18ac9d0; '__str__()' failed>

在继承Process时我是否遗漏了什么?

1 个答案:

答案 0 :(得分:3)

问题在于,您的主进程在之前终止分叉进程有机会从dict中获取值。

你应该调用proc.join()让进程有机会获取dict。

如果您查看示例代码,那么您将看到完全相同的事情。