线程池执行器的线程数量

3 投票
1 回答
10207 浏览
提问于 2025-04-17 22:10

我正在尝试在Python中使用futures这个库来实现线程池。但是,我遇到的问题是所有的线程都是同时执行的,所以根本没有真正的线程池效果。更具体来说,我得到了10个线程在运行这个函数,而不是预期的5个,然后再执行其他的。请看我使用的代码,你觉得有什么问题吗?还是说这只是这个库的实现方式?谢谢!

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = [executor.submit(f, X, y) for t in range(10)]
    for future in as_completed(futures):
        self.trees.append(future.result())

1 个回答

0

在文档中提到,通常一个工作者会有多个线程:

https://docs.python.org/3/library/concurrent.futures.html

在3.5版本中进行了更改:如果没有设置max_workers,或者设置为None,它会默认使用机器上处理器的数量乘以5。这样做是因为ThreadPoolExecutor通常用于处理输入输出(I/O)操作,而不是计算(CPU)工作,所以工作者的数量应该比ProcessPoolExecutor的工作者数量多。

如果你发现默认值不是5倍,可能是因为你使用的版本不是3.5以上,或者是出于其他内部优化的原因。

撰写回答