为什么不在python多处理中更新dict?

时间:2017-11-16 15:03:08

标签: python python-2.7 multiprocessing

请检查以下代码。

我初始化了一个dict并将其发送到函数f。我检查了return_dict的地址。它不会在过程中发生变化。所以我认为dict应该更新

但它没有更新,为什么?

from multiprocessing import Process

return_dict = dict({})
print id(return_dict)


def f(value, return_dict):
    return_dict['value'] = value
    print return_dict


p = Process(target=f, args=(100, return_dict))
p.start()
p.join()
print return_dict

1 个答案:

答案 0 :(得分:4)

您的Process()创建了另一个进程。它在生成子进程时从父进程继承对象,但对这些对象的修改仅修改子进程内存中的对象,并且这些更改对父进程都不可见。

您可以使用Manager()

来解决此问题
from multiprocessing import Process, Manager

def f(value, return_dict):
    return_dict['value'] = value
    print return_dict

d = Manager().dict()    
p = Process(target=f, args=(100, d))
p.start()
p.join()
print d