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

I am unable to update the global dict in python in multiprocessing

我无法在多处理中更新 python 中的全局字典,输出为 {}。我在代码中做错了什么?我打算打印出更新后的字典水果。

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运行时,它在自己的地址space中执行,它看到的全局变量fruits与main的全局变量fruits不一样过程看到。最简单的解决方案是向 work 传递一个可跨进程共享的 托管字典 。参见 the documentation

您也不应依赖在主进程中使用计时器来确保字典已更新。相反,在 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'}"}