Windows下Python 2.4获取cpuinfo
我想在Python 2.4中获取cpuinfo信息,以便确定一台机器的处理器数量。(这个代码应该能够在不同的操作系统上运行)。我已经为Linux写了代码,但不知道怎么让它在Windows上工作。
import subprocess, re
cmd = 'cat /proc/cpuinfo |grep processor |wc'
d = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
lines = d.stdout.readlines()
lines = re.split('\s+', lines[0])
number_of_procs = int(lines[1])
假设我在Windows机器上没有安装cygwin,只装了Python 2.4。请告诉我是否有可以用来实现这个功能的模块,或者有什么帮助可以让我写出这个功能的代码。
谢谢,
Sandhya
5 个回答
1
好吧,这个方法不能跨平台使用,因为你依赖的是/proc文件系统,而Windows是没有这个的(虽然如果有的话,那就太酷了...)
一个选择是用几个“如果”来判断平台类型,然后在Linux上从/proc/cpuinfo获取信息,而在Windows上则从WMI(Win32_Processor)获取信息(http://www.activexperts.com/admin/scripts/wmi/python/0356/)
不过,platform.processor()应该是相对独立于平台的。正如文档所说,并不是所有平台都实现了这个功能。
5
在 Python 2.6 及以上版本中:
>>> import multiprocessing
>>> multiprocessing.cpu_count()
2
更新
因为有重复的问题,所以标记为关闭。可以查看如何使用 Python 查找 CPU 数量中的第二个答案,里面有不使用 multiprocessing 模块的方法。
1
这是布鲁斯·埃克尔写的一个旧方案,应该可以在所有主要平台上使用:http://codeliberates.blogspot.com/2008/05/detecting-cpuscores-in-python.html
def detectCPUs(): """ Detects the number of CPUs on a system. Cribbed from pp. """ # Linux, Unix and MacOS: if hasattr(os, "sysconf"): if os.sysconf_names.has_key("SC_NPROCESSORS_ONLN"): # Linux & Unix: ncpus = os.sysconf("SC_NPROCESSORS_ONLN") if isinstance(ncpus, int) and ncpus > 0: return ncpus else: # OSX: return int(os.popen2("sysctl -n hw.ncpu")[1].read()) # Windows: if os.environ.has_key("NUMBER_OF_PROCESSORS"): ncpus = int(os.environ["NUMBER_OF_PROCESSORS"]); if ncpus > 0: return ncpus return 1 # Default