我正在使用joblib(多处理软件包的包装器(来通过枚举的参数上的某些函数运行一个循环。当我进行htop
时,我会看到过程数量等于CPU计数的数量(n_jobs=-1
自动为您执行此操作(。但是,我还看到每个过程都具有与cpu_count - 1
一样多的线程...这是期望的吗?怎么有第二层并行性?
这似乎是Joblib后端的一个问题,称为Loky
,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)