Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多进程附加到实例列表_Python_Multiprocessing_Python Multiprocessing - Fatal编程技术网

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

Python 使用多进程附加到实例列表,python,multiprocessing,python-multiprocessing,Python,Multiprocessing,Python Multiprocessing,我有一个类,它有一个属性列表。在实例化该类之后,我想做一些计算,然后将结果(即列表本身)附加到列表中。我正试图使用多进程来加速计算/追加,因为顺序无关紧要。以下是一个简化示例: import multiprocessing as mp class Test(object): def __init__(self): self.basis = [] def action(self, i): self.basis.append([i]) d

我有一个类,它有一个属性列表。在实例化该类之后,我想做一些计算,然后将结果(即列表本身)附加到列表中。我正试图使用
多进程
来加速计算/追加,因为顺序无关紧要。以下是一个简化示例:

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\ump
)。我很确定
test\u mp
不起作用,因为每个进程都没有共享自己版本的
self.basis
,但我不确定如何克服这个问题。我曾研究过将
self.basis
制作成
mp.Array
,但这失败了,因为我试图附加列表,而不仅仅是数字。我还发现了其他几个类似的问题,但当试图在这样的类中使用他们的解决方案时(酸洗错误等),他们的答案似乎出现了问题。

您可以使用

输出:

[[0], [3], [1], [4], [2]]
你可以用

输出:

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