use*_*611 2 python multiprocessing
我正在尝试执行一项任务,我会将某些内容分配给列表.我会用多处理来做.完成所有任务后,我想总结一下.但是,我得到的并不是我的预期.你知道为什么会这样吗?以下是示例代码.结果应为45,而不是0.
from multiprocessing import Process
def a(b):
for i in range(10):
b[i] = i
b = [0 for _ in range(10)]
p = Process(target=a, args=(b,))
p.start()
p.join()
print sum(b)
Run Code Online (Sandbox Code Playgroud)
原因是因为列表b在单独的进程中发生了变异.当进程加入时,原始进程对突变没有任何了解b.解决此问题的方法是让您的列表由a管理multiprocessing.Manager.
from multiprocessing import Process,Manager
def a(b):
for i in range(10):
b[i] = i
b = [0 for _ in range(10)]
#create a manager to manage access to `b`
manager = Manager()
b = manager.list(b)
p = Process(target=a, args=(b,))
p.start()
p.join()
print sum(b)
Run Code Online (Sandbox Code Playgroud)