Python多处理 - 为什么每个进程都有这么多线程?

时间:2017-04-26 19:45:38

标签: python multithreading multiprocessing joblib htop

我正在使用joblib(多处理包的包装器)在可枚举的参数上运行某个函数的循环。当我执行htop时,我看到进程数等于cpu计数(n_jobs=-1自动为您执行此操作)。但是,我也看到每个进程都有cpu_count - 1一样多的线程......这是预期的吗?怎么会有第二层并行性,它来自哪里?

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)