我正在异步函数内运行一些 cpu 绑定代码,使用
ProcessPoolExecutor
pool = concurrent.futures.ProcessPoolExecutor(10)
...
loop.run_in_executor(
pool, cpu_bound_func)
如何获取可用的工人数量?
如果我们深入观察,我们可以看到
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)