我正在尝试使用期货后端程序包在Python中使用ThreadPoolExecutor。但是,问题是所有线程都在同一时间执行,因此不会发生实际的池化。更具体地说,我获得该函数的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())
答案 0 :(得分:0)
在文档中说,每个工人通常有多个线程:
https://docs.python.org/3/library/concurrent.futures.html
版本3.5中的更改:如果max_workers为None或未给出,它将默认为计算机上的处理器数乘以5,假定ThreadPoolExecutor通常用于重叠I / O而不是CPU工作和数量的工人人数应高于ProcessPoolExecutor的工人人数。
可能不是默认的5乘数,因为您使用的版本不是3.5+或其他内部优化原因。