python 如何获取ProcessPoolExecutor中可用的worker数量?

omhiaaxx  于 2023-10-14  发布在  Python
关注(0)|答案(1)|浏览(111)

我正在一个ProcessPoolExecutor函数中运行一些cpu绑定的代码。

pool = concurrent.futures.ProcessPoolExecutor(10)
...
loop.run_in_executor(
            pool, cpu_bound_func)

我如何获得可用的工人数量?

vshtjzan

vshtjzan1#

ProcessPoolExecutor的Python文档说 “如果max_workers为None或未给出,则默认为机器上的处理器数量。"
如果我们深入了解一下,我们可以看到ProcessPoolExecutor使用os.cpu_count()来确定要使用的worker数量(self._max_workers = os.cpu_count() or 1)。因此,获取worker数量的一种方法是执行以下操作(不推荐使用,因为_max_workers的实现可能会在未来发生变化):

pool = ProcessPoolExecutor()
print(pool._max_workers)

如果您在创建池之前需要这些信息,可以直接使用os.cpu_count()

import os
from concurrent.futures import ProcessPoolExecutor

actual_cpu_count = os.cpu_count()
desired_cpu_count = actual_cpu_count - 1  # for example
pool = ProcessPoolExecutor(desired_cpu_count)

相关问题