如何在python中获取可用核心数

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

我知道在Python中获取核心数的标准方法是使用multiprocess.cpu_count

import multiprocessing
print(multiprocessing.cpu_count())

此外,在创建任务时,我们可以使用 taskset 指定进程可以访问的一些核心。

显然

cpu_count
始终获取机器的可用核心数量,无论进程是否被限制为仅使用其中一些核心。

python nproc.py
taskset 7 python nproc.py
taskset 1 python nproc.py
另一方面,

nproc给出了进程可用的核心数量。

taskset 7 nproc # gives at most 3
taskset 1 nproc # gives 1

我知道我可以调用

nproc
taskset -p {os.getpid()}
来获取正确的核心数量。有没有另一种方法可以做到这一点,而不依赖于其他程序(阅读
/proc/{os.pid()}/*
可能是一个解决方案)。

谢谢你

python linux multiprocessing taskset
1个回答
4
投票

根据文档,这可能可用性有限,但似乎

os
库有你想要的;

与调度程序的接口

这些函数控制操作系统如何为进程分配 CPU 时间。它们仅在某些 Unix 平台上可用。有关更多详细信息,请参阅 Unix 联机帮助页。

3.3 版本中的新增功能。

...

os.sched_getaffinity(pid)

返回具有 PID pid 的进程(如果为零,则返回当前进程)所限制的 CPU 集合。

使用 Ubuntu 20.04.2 (WSL) 进行测试:

aaron@DESKTOP:/mnt/c$ python3 -c "import os; print(os.sched_getaffinity(0))"
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
aaron@DESKTOP:/mnt/c$ taskset 7 python3 -c "import os; print(os.sched_getaffinity(0))"
{0, 1, 2}

编辑:在 Windows 上,您可能需要查看

psutil

© www.soinside.com 2019 - 2024. All rights reserved.