Ниже указан мой 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'
Проблема в том, что не удается выбрать функцию. Это игрушечный пример. На самом деле у меня есть большой проект, который использует многопроцессорный пул, пару дампов и загрузок. Все они терпят неудачу.
Я застрял в этой точке, и я ценю любую помощь или указатели, чтобы решить вышеупомянутую ошибку.