在Python中检测*可用* CPU数量的便携方式

时间:2015-07-10 17:37:15

标签: python cpu

根据这个问题和答案 - Python multiprocessing.cpu_count() returns '1' on 4-core Nvidia Jetson TK1 - 某些系统上Python multiprocessing.cpu_count()函数的输出反映了主动正在使用的CPU数量,而不是调用Python程序实际可用的CPU数量。

常见的Python习惯用法是使用cpu_count()的返回值来初始化Pool中的进程数。但是,在使用这种"动态CPU激活"策略,这个成语破坏得相当严重(至少在相对静止的系统上)。

是否有一些直接(和便携)的方式来获取Python中可用处理器的数量(而不是当前正在使用的数量)?

备注:

  1. How to find out the number of CPUs using python的已接受答案未回答此问题,因为正如问题顶部链接的问题所述,打印{{1}的内容}显示该程序可用的所有4个核心。

  2. 在我看来,"便携式"排除涉及解析/proc/self/status内容的任何方法,其格式可能因Linux的发行版本而异,并且在OS X上甚至不存在。(对于任何其他伪文件也是如此) 。)

2 个答案:

答案 0 :(得分:8)

我认为你不会得到任何真正便携的答案,所以我会给出正确答案。

Linux的正确 * 答案为len(os.sched_getaffinity(pid)),其中pid可能为0当前进程。这个函数在Python 3.3及更高版本中公开;如果你之前需要它,你必须做一些花哨的cffi编码。

修改:您可能会尝试查看是否可以使用int omp_get_num_procs();函数(如果它存在),这是我在this question找到的唯一有意义的答案,但我还没有尝试过Python

答案 1 :(得分:4)

使用psutil:

来自文档https://psutil.readthedocs.io/en/latest/

>>> import psutil
>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)  # Ignoring virtual cores
2

这是便携式的