使用多进程附加到实例列表

时间:2015-05-28 22:58:48

标签: python multiprocessing python-multiprocessing

我有一个类,其中包含一个属性列表。在实例化类之后,我想进行一些计算,然后将结果(列表本身)附加到列表中。我尝试使用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,但由于我尝试追加列表而不仅仅是数字,因此失败了。我发现了其他几个类似的问题,但是当他们尝试在这样的类中使用他们的解决方案(酸洗错误等)时,他们的答案似乎有所破坏。

1 个答案:

答案 0 :(得分:4)

您可以使用Manager

import multiprocessing as mp

class Test(object):
    def __init__(self):
        self.basis = mp.Manager().list()

输出:

[[0], [3], [1], [4], [2]]