在Python中检测可用CPU数量的可移植方法
在Python中检测可用CPU数量的可移植方法
根据这个问题和答案——Python multiprocessing.cpu_count()在4核Nvidia Jetson TK1上返回\'1\'——Python的<multiprocessing.cpu_count()>函数在某些系统上的输出反映的是调用Python程序实际可用的CPU数量,而不是实际可用的CPU数量。
一个常见的Python习语是使用cpu_count()
的返回值来初始化Pool
中的进程数量。然而,在使用这种“动态CPU激活”策略的系统上,这种习惯用法会相当严重地破裂(至少在一个相对寂静的系统上)。
有没有一种简单(且可移植)的方法从Python中获取可用处理器的数量(而不是当前使用的数量)?
注意:
- 本问题并不被如何使用Python找出CPU数量的已接受答案回答,因为正如在此问题的顶部链接的问题中所指出的那样,打印
/proc/self/status
的内容显示所有4个内核都可用于程序。 - 在我看来,“可移植”不包括涉及解析
/proc/self/status
内容的任何方法,因为其格式可能因Linux的每个发布版本而异,甚至在OS X上不存在(任何其他伪文件也是同样的情况)。
admin 更改状态以发布 2023年5月21日
使用psutil:
从https://psutil.readthedocs.io/en/latest/文档中得知:
>>> import psutil >>> psutil.cpu_count() 4 >>> psutil.cpu_count(logical=False) # Ignoring virtual cores 2
这是可移植的
我认为你可能不会得到任何真正可移植的答案,所以我会给出一个正确的答案。
Linux的正确答案是len(os.sched_getaffinity(pid))
,其中pid
可以是当前进程的0
。此函数在Python 3.3及更高版本中公开;如果您需要早期版本,则需要进行一些复杂的cffi
编码。
编辑:你可以尝试看看是否可以使用函数int omp_get_num_procs();
,如果存在,它是我在这个问题上找到的唯一有意义的答案,但我还没有从Python中尝试过它。