我正在使用joblib(多处理包的包装器)在可枚举的参数上运行某个函数的循环。当我执行htop
时,我看到进程数等于cpu计数(n_jobs=-1
自动为您执行此操作)。但是,我也看到每个进程都有cpu_count - 1
一样多的线程......这是预期的吗?怎么会有第二层并行性,它来自哪里?
答案 0 :(得分:1)
一个叫做Loky
的joblib后端似乎是一个问题,它被joblib用作默认值,我遇到了完全相同的问题,并且由于线程太多,导致性能大幅下降。为了仅使用核心而不使用线程,您必须通过以下方式强制joblib使用multiprocessing
作为后端:
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)