0

我是所有多处理东西的新手,我当前的程序不起作用。我在最后几个小时阅读了有关该问题的内容,并且尝试了很多方法,无论是在课堂内外还是在不同的课堂上,都没有奏效。

import multiprocessing as mp

class A:
    @staticmethod
    def multi():
        a = [1,2,3]
        b = 4
        prepared = list()
        for x in a:
            prepared.append((x, b))
        pool = mp.Pool(mp.cpu_count()-1)
        result = pool.starmap(method, prepared)
        pool.close()
        pool.join()
        print(result)


def method(a, x):
    return (a-x, a+x)


if __name__ == "__main__":
    a = A()
    a.multi()

这只是我的类/方法结构的一个示例(尽管我在多处理部分没有更改任何内容,但这个确实有效)。

这是我得到的例外:

AttributeError: Can't pickle local object 'FeatureExtracter.<locals>.feature_extracter_fwd'

如果有人知道解决方案或者至少知道为什么不能腌制该方法,那就太好了。

4

1 回答 1

0
import multiprocessing as mp

class A:
    @staticmethod
    def multi():
        b = 4
        return [(x, b) for x in [1,2,3]]

def method(a,x): return (a-x, a+x)

if __name__ == "__main__":
    with mp.Pool(mp.cpu_count() - 1) as p:
        result = p.starmap(method, A().multi())
    print(result)
于 2019-03-19T12:25:41.367 回答