0
我認爲我明白這個問題,當一個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
被調用,但最終的對象被扔掉了。我如何「保持國家」?