根据这个问题和答案 - 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中可用处理器的数量(而不是当前正在使用的数量)?
备注:
How to find out the number of CPUs using python的已接受答案未回答此问题,因为正如此问题顶部链接的问题所述,打印{{1}的内容}显示该程序可用的所有4个核心。
在我看来,"便携式"排除涉及解析/proc/self/status
内容的任何方法,其格式可能因Linux的发行版本而异,并且在OS X上甚至不存在。(对于任何其他伪文件也是如此) 。)
答案 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
这是便携式的