2016-11-08 87 views
1

按照ThreadPoolExecutorPython的多线程max_workers

如果max_workersNone或不给予documentation,将默认为机器上的处理器数量。

如果我不把它像这样

​​

值是坏的情况下的性能,我的价值是很低的(2)? python是否已经为None值分配了所有的CPU进程,而为数值分配的值只有2个?

回答

1

首先,您似乎在链接中引用了文档的错误部分,即针对进程的文档,而不是线程。所述one for concurrent.futures.ThreadPoolExecutor状态:

改变在版本3.5:如果max_workersNone或没有给出,则默认的机器,乘以5上的处理器的数量,假设的ThreadPoolExecutor经常用于重叠I/O而不是CPU工作,并且工人数量应该高于ProcessPoolExecutor的工作人员数量。


由于您使用的线程,而不是过程,假设您的应用程序是IO限制,没有CPU的约束,并且您使用此为concurrency, not parallelism。您使用的线程越多,您将实现的并发性越高(达到某个点),但获得的CPU周期会更少(因为会有上下文切换)。您必须在典型工作负载下测试您的应用程序,以查看哪些最适合您。对此没有普遍的最佳解决方案。

+0

我正在使用python 2.7 - 在这种情况下会是什么?我想问什么,如果我限制或不限制,如果我想要我需要的最大工作人员(例如,我调用4种方法), – Dejell

+0

@Dejell首先,请注意,您已链接到Python 3.5文档。无论如何,我的观点是你需要尝试不同的价值观来看看对你有用。无论是你,还是Python标准库的作者,都不能事先猜测什么最适合你的情况。如果表现对你很重要,我不会依赖默认的暗示号码。 –

+0

谢谢。这个“默认隐含号码”是什么?也许我缺少的东西 - 将python“分配”该内存的默认数量,或只有一个我写execute.submit()? – Dejell