2

我正在尝试执行一项任务,将某些内容分配给列表。我会用多处理来做。完成所有任务后,我想总结一下。但是,我得到的并不是我所期望的。你知道为什么会这样吗?下面只是一个示例代码。结果应该是 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)
4

1 回答 1

6

原因是该列表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)
于 2013-06-11T12:27:37.337 回答