以下是来自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时我是否遗漏了什么?
答案 0 :(得分:3)
问题在于,您的主进程在之前终止分叉进程有机会从dict中获取值。
你应该调用proc.join()让进程有机会获取dict。
如果您查看示例代码,那么您将看到完全相同的事情。