我无法在多处理中更新python中的全局dict



我无法在多处理中更新python中的全局dict,输出为{}。我在代码中会做错什么?我打算把最新的dict成果打印出来。

import multiprocessing as mp
import time

fruits ={}

def work():
global fruits
fruits["Apple"]="{'color':'Red','origin':'Germany'}"

if __name__ == "__main__":
p = mp.Process(target=work)
p.start()    
time.sleep(2)
print(fruits)

work运行时,它在自己的地址空间中执行,并且它看到的全局变量fruits与主进程看到的全局变数fruits不同。最简单的解决方案是向work传递一个托管字典,该字典可跨进程共享。请参阅文档。

您也不应该依赖于在主进程中使用计时器来确保字典已经更新。相反,在multiprocessing.Process实例上调用方法join。这将导致主流程阻塞,直到子流程完成:

import multiprocessing as mp

def work(fruits):
fruits["Apple"]="{'color': 'Red', 'origin':'Germany'}"
if __name__ == "__main__":
with mp.Manager() as manager:
fruits = manager.dict()
p = mp.Process(target=work, args=(fruits,))
p.start()
p.join()
print(fruits)

打印:

{'Apple': "{'color': 'Red', 'origin':'Germany'}"}

相关内容

  • 没有找到相关文章

最新更新