Проблемы многопроцессорности в Cython из-за рассола - PullRequest
1 голос
/ 14 апреля 2020

Ниже указан мой python код

from multiprocessing import Pool
from functools import partial

def fun(a, b):
    return a+b

def do():
    p = Pool(processes=3)
    p_image = partial(fun, 1)
    for processed_example in p.imap(p_image, [1,2,3,4,5]):
        if processed_example:
            print (processed_example)

Файл setup.py для использования Cython ниже

from setuptools import setup
from setuptools.extension import Extension

from Cython.Build import cythonize
from Cython.Distutils import build_ext

setup(
        name="mypkg",
        ext_modules=cythonize(
            [
            Extension(".*", ["test.py"]),
            ],
            build_dir="build",
            compiler_directives=dict(
                always_allow_keywords=True
                )),
        cmdclass=dict(
            build_ext=build_ext
            ),
        packages=["mypkg", "mypkg2"]
     )

Я создаю .so файлы на linux, используя команда python setup.py build_ext

Наконец, для тестирования я загружаю файл .so и запускаю метод do() в python, как показано ниже

from test import do
do()

Но это выдает ошибку

Файл "/datadrive/user/anaconda3/envs/tf/lib/python3.7/multiprocessing/reduction.py", строка 51, в дампах cls (buf, protocol) .dump. (obj) _pickle.PicklingError: Can't pickle: сбой импорта модуля 'test'

Проблема в том, что не удается выбрать функцию. Это игрушечный пример. На самом деле у меня есть большой проект, который использует многопроцессорный пул, пару дампов и загрузок. Все они терпят неудачу.

Я застрял в этой точке, и я ценю любую помощь или указатели, чтобы решить вышеупомянутую ошибку.

...