请检查以下代码。
我初始化了一个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
答案 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