繁体   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