Joblib не видит модули Cython, когда n_jobs> 1 - PullRequest
0 голосов
/ 12 января 2020

Я не могу заставить joblib увидеть функцию Cython, которую я определяю, и не знаю почему.

Вот пример минимального кода в блокноте Google Colab.

Пример минимального кода:

from joblib import Parallel, delayed

%load_ext Cython

%%cython -a

cimport cython

def myfunc(int a):
  return a+1

with Parallel(n_jobs=1) as parallel:
  test = parallel(delayed(myfunc)(i) for i in range(10))
  print(test)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

with Parallel(n_jobs=2) as parallel:
  test = parallel(delayed(myfunc)(i) for i in range(10))
  print(test)

ModuleNotFoundError: Нет модуля с именем '_cython_magic_e890d3cd151f55a5800848bf00284fa3' '' '

Вышеуказанное исключение было прямым причина следующего исключения: joblib.externals.loky.process_executor.BrokenProcessPool: не удалось удалить сериализацию задачи. Пожалуйста, убедитесь, что все аргументы функции доступны для выбора.

У меня возникает та же проблема за пределами jupyter / i python при сборке модуля с помощью setup.py

1 Ответ

0 голосов
/ 13 января 2020

После прочтения наиболее близким к ответу, который я смог найти, является проблема loky. Решение заключается в использовании with parallel_backend('multiprocessing'):

...