背景
使用numba+joblib会抛异常
代码
import numba as nb
from joblib import Parallel,delayed
@nb.njit(nogil=True, parallel=True)
def work_auc(arg):
nb.set_num_threads(6)
pass
with Parallel(1, "threading", 1) as pl:
pl(
(
delayed(work_auc)(argsx)
for argsx in [1,2,3]
)
)
异常信息
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
Segmentation fault (core dumped)
解决
同事告诉我,是因为我在多线程(多线程、loky也是一样)中使用了numba的parallel参数,在线程中套了线程会有异常,建议不要使用numba的parallel=True。想要加速不如多线程执行函数,函数中解开GIL锁。