3

我正在尝试使用 futures backport 包在 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())
4

1 回答 1

0

在文档中,它说每个工作人员通常有多个线程:

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

在 3.5 版更改:如果 max_workers 为 None 或未给定,则默认为机器上的处理器数,乘以 5,假设 ThreadPoolExecutor 经常用于重叠 I/O 而不是 CPU 工作,并且 worker 的数量应该高于 ProcessPoolExecutor 的工作人员数量。

可能它不会默认为 5 乘数,因为您使用的是 3.5+ 以外的版本或出于其他一些内部优化原因。

于 2020-07-03T11:22:05.953 回答