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

2024-04-24 03:33:27 发布

您现在位置:Python中文网/ 问答频道 /正文

根据这个问题和答案--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的公认答案回答的,因为正如在这个问题顶部链接的问题中所指出的,打印/proc/self/status的内容会显示所有4个核心都对程序可用。

  2. 在我看来,“可移植性”排除了任何涉及解析/proc/self/status内容的方法,其格式可能因Linux版本而异,甚至在OS X上都不存在(其他伪文件也一样)。


Tags: 方法答案self程序内容数量系统status
2条回答

使用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)),其中{}可能是当前进程的0。这个函数在python3.3和更高版本中公开;如果您在前面需要它,您必须进行一些奇特的cffi编码。在

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

相关问题 更多 >