簡體   English   中英

用多進程追加到實例列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM