Python 多处理 - 为啥每个进程有这么多线程?
Posted
技术标签:
【中文标题】Python 多处理 - 为啥每个进程有这么多线程?【英文标题】:Python multiprocessing - why do I get so many thread per process?Python 多处理 - 为什么每个进程有这么多线程? 【发布时间】:2017-09-24 09:23:18 【问题描述】:我正在使用joblib(多处理包的包装器)在可枚举参数上的某个函数上运行循环。当我执行htop
时,我看到进程数等于cpu 数(n_jobs=-1
会自动为您执行此操作)。但是,我也看到每个进程都有与cpu_count - 1
一样多的线程...这是预期的吗?怎么会有第二层并行,又是从哪里来的呢?
【问题讨论】:
你找到解决这个问题的方法了吗? 不。没有人回答... 我终于找到了解决办法,请看下面的答案。 【参考方案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)
【讨论】:
你能报告joblib中的问题吗?我想他们应该调查一下。 github.com/joblib/joblib/issues以上是关于Python 多处理 - 为啥每个进程有这么多线程?的主要内容,如果未能解决你的问题,请参考以下文章