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