我正在尝试执行一项任务,我会将某些内容分配给列表。我会用多处理来做。所有任务完成后,我想总结一下。但是,我得到的并不是我所期望的。你知道为什么会这样吗?下面只是一个示例代码。结果应该是 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)
最佳答案
原因是因为列表 b
在一个单独的进程中发生了变异。当进程加入时,原始进程对 b
的变化一无所知。解决此问题的方法是让您的列表由 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)
关于python - 如何在 python 中使用多处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17044058/