请检查下面的代码。
我初始化了一个字典并将其发送给函数 f。我检查了 return_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
最佳答案
您的 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
关于python - 为什么 dict 没有在 python 多处理中更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47332937/