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

问题描述 投票:0回答:1

我正在异步函数内运行一些 cpu 绑定代码,使用

ProcessPoolExecutor

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

如何获取可用的工人数量?

python python-3.x proc
1个回答
0
投票

ProcessPoolExecutor

Python 文档说 “如果 max_workers 为 None 或未给出,它将默认为机器上的处理器数量。”

如果我们深入观察,我们可以看到

ProcessPoolExecutor
使用
os.cpu_count()
来确定要使用的工人数量 (
self._max_workers = os.cpu_count() or 1
)。因此,获取工人数量的一种方法是执行以下操作(不推荐,因为
_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)
© www.soinside.com 2019 - 2024. All rights reserved.