[英]append to instance list with multiprocess
我有一個類,其中包含其屬性之一的列表。 實例化該類之后,我想進行一些計算,然后將結果(列表本身)附加到列表中。 由於順序無關緊要,因此我嘗試使用multiprocess
來加快計算/追加。 以下是一個簡化的示例:
import multiprocessing as mp
class Test(object):
def __init__(self):
self.basis = []
def action(self, i):
self.basis.append([i])
def test(self):
for i in xrange(5):
self.action(i)
print(self.basis)
def test_mp(self):
jobs = []
for i in xrange(5):
job = mp.Process(target=self.action, args=(i,))
jobs.append(job)
job.start()
for j in jobs:
j.join()
print(self.basis)
Test().test()
# Returns correct list
Test().test_mp()
# Returns empty (incorrect) list
我的方法似乎只能在不嘗試並行運行的情況下工作(適用於test
,但不適用於test_mp
)。 我非常確定test_mp
無法正常工作,因為每個進程都沒有共享它自己的self.basis
版本,但是我不確定如何克服這一點。 我已經研究過將self.basis
變成mp.Array
,但這失敗了,因為我試圖附加列表,而不僅僅是數字。 我發現了其他幾個類似的問題,但是當嘗試在此類類中使用其解決方案時,它們的答案似乎不正確(腌制錯誤等)。
您可以使用管理器
import multiprocessing as mp
class Test(object):
def __init__(self):
self.basis = mp.Manager().list()
輸出:
[[0], [3], [1], [4], [2]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.