在Python中检测可用CPU数量的可移植方法

11 浏览
0 Comments

在Python中检测可用CPU数量的可移植方法

根据这个问题和答案——Python multiprocessing.cpu_count()在4核Nvidia Jetson TK1上返回\'1\'——Python的<multiprocessing.cpu_count()>函数在某些系统上的输出反映的是调用Python程序实际可用的CPU数量,而不是实际可用的CPU数量。

一个常见的Python习语是使用cpu_count()的返回值来初始化Pool中的进程数量。然而,在使用这种“动态CPU激活”策略的系统上,这种习惯用法会相当严重地破裂(至少在一个相对寂静的系统上)。

有没有一种简单(且可移植)的方法从Python中获取可用处理器的数量(而不是当前使用的数量)?

注意:

  1. 本问题并不被如何使用Python找出CPU数量的已接受答案回答,因为正如在此问题的顶部链接的问题中所指出的那样,打印/proc/self/status的内容显示所有4个内核都可用于程序。
  2. 在我看来,“可移植”不包括涉及解析/proc/self/status内容的任何方法,因为其格式可能因Linux的每个发布版本而异,甚至在OS X上不存在(任何其他伪文件也是同样的情况)。
admin 更改状态以发布 2023年5月21日
0
0 Comments

使用psutil:

https://psutil.readthedocs.io/en/latest/文档中得知:

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

这是可移植的

0
0 Comments

我认为你可能不会得到任何真正可移植的答案,所以我会给出一个正确的答案。

Linux的正确答案是len(os.sched_getaffinity(pid)),其中pid可以是当前进程的0。此函数在Python 3.3及更高版本中公开;如果您需要早期版本,则需要进行一些复杂的cffi编码。

编辑:你可以尝试看看是否可以使用函数int omp_get_num_procs();,如果存在,它是我在这个问题上找到的唯一有意义的答案,但我还没有从Python中尝试过它。

0