我正在使用joblib(多处理包的包装器)在可枚举参数上的某个函数上运行循环。当我这样做时,htop
我看到进程数等于 cpu 数(n_jobs=-1
自动为您执行此操作)。但是,我也看到每个进程都有尽可能多的线程cpu_count - 1
......这是预期的吗?为什么会有第二层并行性,它从何而来?
问问题
1266 次
1 回答
1
这似乎是一个调用joblib后端的问题,Loky
它被joblib用作默认后端,我遇到了完全相同的问题,并且由于线程太多,性能大幅下降。为了只使用内核而不使用线程,您必须通过multiprocessing
以下方式强制 joblib 用作后端:
from joblib import Parallel, delayed
my_list_of_results = Parallel(n_jobs=-1, backend="multiprocessing")(delayed(my_function)(my_stuff, ) for my_stuff in whatever)
于 2018-12-12T20:33:46.557 回答