从 concurrent.futures 使用 ThreadPoolExecutor 时的 max_workers 数?

Posted

技术标签:

【中文标题】从 concurrent.futures 使用 ThreadPoolExecutor 时的 max_workers 数?【英文标题】:Number of max_workers when using ThreadPoolExecutor from concurrent.futures? 【发布时间】:2018-05-09 22:41:17 【问题描述】:

在从 concurrent.futures 决定在 ThreadPoolExecutor 中将 max_workers 设置为什么时需要考虑哪些因素?

只要您可以预期 Python 3.5+ 可用,是否有任何理由不将 max_workers 设置为 None ,这将“默认为机器上的处理器数量,乘以 5”,如此处文档中所述? https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor

【问题讨论】:

【参考方案1】:

我不认为这个问题可以这么笼统地解决;这将取决于每种情况。

来自this answer:

使用的线程越多,实现的并发性就越高(最高可达 一点),但你会得到更少的 CPU 周期(因为会有上下文 开关)。您必须在典型情况下检测您的应用程序 工作负载,看看什么最适合您。没有万能的 最佳解决方案。

【讨论】:

会很感激 cmets 说出它为什么是错的,而不是仅仅得到一个负票.. :( 根据您并行运行的内容要考虑的另一点是内存占用。

以上是关于从 concurrent.futures 使用 ThreadPoolExecutor 时的 max_workers 数?的主要内容,如果未能解决你的问题,请参考以下文章

concurrent.futures

使用concurrent.futures模块并发,实现进程池线程池

python concurrent.futures.ProcessPoolExecutor:.submit() 与 .map() 的性能

如何让 concurrent.futures ProcessPoolExecutor 与字典一起工作?

使用 concurrent.futures 模块中的 ThreadPoolExecutor 终止执行程序

python并发之concurrent.futures