Python多线程max_workers

时间:2016-11-08 17:21:29

标签: python multithreading cpu

根据ThreadPoolExecutor

documentation
  

如果max_workersNone或未给出,则默认为计算机上的处理器数量。

如果我没有设置像这样的值

ThreadPoolExecutor(max_workers=None)

如果我的价值非常低(2),它对性能有害吗? python是否已经为None值分配了所有CPU进程,而对于带有数字的值只分配2?

1 个答案:

答案 0 :(得分:6)

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

  

版本3.5中已更改:如果max_workersNone或未给出,则默认为计算机上的处理器数,乘以5,假设ThreadPoolExecutor经常用于重叠I / O而不是CPU工作,工人数应高于ProcessPoolExecutor的工作人员数。

由于您使用的是线程,而不是进程,因此假设您的应用程序是IO绑定的,而不是CPU绑定的,并且您将concurrency, not parallelism用于此操作。您使用的线程越多,您实现的并发性越高(达到某一点),但您获得的CPU周期越少(因为将有上下文切换)。您必须在典型工作负载下检测应用程序,以查看最适合您的应用程序。对此没有普遍优化的解决方案。