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

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)

Han*_*nnu 5

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)