根据ThreadPoolExecutor
如果
max_workers
为None
或未给出,则默认为计算机上的处理器数量。
如果我没有设置像这样的值
ThreadPoolExecutor(max_workers=None)
如果我的价值非常低(2),它对性能有害吗? python是否已经为None值分配了所有CPU进程,而对于带有数字的值只分配2?
答案 0 :(得分:6)
首先,您似乎在引用链接中文档的错误部分,即进程而不是线程。 one for concurrent.futures.ThreadPoolExecutor
州:
版本3.5中已更改:如果
max_workers
为None
或未给出,则默认为计算机上的处理器数,乘以5,假设ThreadPoolExecutor经常用于重叠I / O而不是CPU工作,工人数应高于ProcessPoolExecutor的工作人员数。
由于您使用的是线程,而不是进程,因此假设您的应用程序是IO绑定的,而不是CPU绑定的,并且您将concurrency, not parallelism用于此操作。您使用的线程越多,您实现的并发性越高(达到某一点),但您获得的CPU周期越少(因为将有上下文切换)。您必须在典型工作负载下检测应用程序,以查看最适合您的应用程序。对此没有普遍优化的解决方案。