我无法在多处理中更新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'}"}