Почему нельзя использовать метод в многопроцессорной среде Python? - PullRequest
0 голосов
/ 19 марта 2019

Я новичок во всем, что касается многопроцессорной обработки, и моя текущая программа не работает. Я прочитал последние часы о проблеме и много пробовал, метод в классе или вне его, а также в другом классе, и он не работал.

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'

Было бы неплохо, если бы кто-то знал решение или хотя бы почему этот метод нельзя мариновать.

1 Ответ

0 голосов
/ 19 марта 2019
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)
...