我想我理解这个问题,当一个multiprocessing.Pool.map
工人抓住它的下一个任务时,根据文档,参数作为一个挑选的对象传递。如果返回值是您要查找的值,这很好,但是如果我想调用一个并行更改对象状态的函数怎么办?例如,考虑一个简单的对象:
from multiprocessing import Pool
class state():
def __init__(self):
self.z = 0
def __repr__(self):
return "%s"%self.z
def compute(self):
print "Computing"
self.z += 1
以及对这个对象的一些操作:
def compute_function(x): x.compute()
A = [state() for _ in xrange(3)]
print A
A[2].compute()
print A
map(compute_function, A)
print A
P = Pool()
P.map(compute_function, A)
print A
输出是:
[0, 0, 0]
Computing
[0, 0, 1]
Computing
Computing
Computing
[1, 1, 2]
Computing
Computing
Computing
[1, 1, 2]
但我希望能读到最后一行[2, 2, 3]
。显然,compute
被调用了,但是生成的对象被扔掉了。我如何“保持状态”?