我想用Python知道本地机器上cpu的数量。当使用一个优化伸缩的仅用户空间的程序调用时,结果应该是user/real作为时间(1)的输出。


当前回答

multiprocessing.cpu_count()将返回逻辑CPU的数量,因此如果您有一个带有超线程的四核CPU,它将返回8。如果你想要物理cpu的数量,使用hwloc的python绑定:

#!/usr/bin/env python
import hwloc
topology = hwloc.Topology()
topology.load()
print topology.get_nbobjs_by_type(hwloc.OBJ_CORE)

hwloc被设计为跨操作系统和架构可移植。

其他回答

这将提供超线程CPU计数

multiprocessing.cpu_count () os.cpu_count ()

这些参数提供了虚拟机CPU计数

psutil.cpu_count () numexpr.detect_number_of_cores ()

只有在虚拟机上工作时才重要。

另一种选择是使用psutil库,它在这些情况下总是很有用:

>>> import psutil
>>> psutil.cpu_count()
2

这应该可以在psutil支持的任何平台上工作(Unix和Windows)。

注意在某些情况下多处理。cpu_count可能引发NotImplementedError,而psutil将能够获得cpu的数量。这只是因为psutil首先尝试使用多处理所使用的相同技术,如果这些技术失败,它还会使用其他技术。

不知道如何添加到代码或回复消息,但这里有对jython的支持,你可以在放弃之前添加进去:

# jython
try:
    from java.lang import Runtime
    runtime = Runtime.getRuntime()
    res = runtime.availableProcessors()
    if res > 0:
        return res
except ImportError:
    pass

这可能适用于我们这些使用不同操作系统的人,但想要获得所有世界的最好:

import os
workers = os.cpu_count()
if 'sched_getaffinity' in dir(os):
    workers = len(os.sched_getaffinity(0))

如果你有版本为>= 2.6的python,你可以简单地使用

import multiprocessing

multiprocessing.cpu_count()

http://docs.python.org/library/multiprocessing.html#multiprocessing.cpu_count