我无法让joblib看到我正在定义的cython函数,并且不确定原因。
Here is the minimal code example in a Google Colab notebook.
最小代码示例:
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:任务无法反序列化。请确保该函数的参数都是可拾取的。
使用setup.py构建模块时,在jupyter / ipython之外出现相同的问题
[阅读后,我能找到的最接近答案的是问题loky
。解决方法是使用with parallel_backend('multiprocessing'):