Kra*_* Li 3 python multiprocessing python-2.7
请检查以下代码。
我初始化了一个 dict 并将其发送给函数 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
Run Code Online (Sandbox Code Playgroud)
您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
Run Code Online (Sandbox Code Playgroud)