Windows下Python 2.4获取cpuinfo

1 投票
5 回答
2180 浏览
提问于 2025-04-16 11:25

我想在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()应该是相对独立于平台的。正如文档所说,并不是所有平台都实现了这个功能。

http://docs.python.org/library/platform.html

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

撰写回答