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 多处理 - 为啥每个进程有这么多线程?的主要内容,如果未能解决你的问题,请参考以下文章

为啥python线程会消耗这么多内存?

为啥在python里推荐使用多进程而不是多线程

python_多线程多进程

python中多进程+协程的使用以及为啥要用它

为啥实习全局字符串值会导致每个多处理进程使用更少的内存?

python下多线程是鸡肋,推荐使用多进程 代码示例