python如何找出是否启用了超线程

时间:2012-10-15 18:45:35

标签: python multiprocessing hyperthreading

我有Intel i7-2600K四核,在Ubuntu 12.04上启用了超线程。我知道我可以通过import multiprocessing; multiprocessing.cpu_count()找出我在Python中拥有多少核心,但这给了我8个因为我在4个物理核心上启用了超线程。我很想知道我有多少物理核心。有没有办法在Python中做到这一点?或者,有没有办法在Python中找出是否启用了超线程?提前感谢您的帮助!

4 个答案:

答案 0 :(得分:6)

要在mac上获取超线程信息,您可以使用:

os.popen('sysctl hw').readlines()[1:20]

并将'hw.activecpu'值与'hw.physicalcpu'值进行比较,前者是包括超线程在内的cpus数。或者,您只需将'hw.physicalcpu'multiprocessing.cpu_count()返回的值进行比较。

在Linux上你可以使用以下方法做类似的事情:

os.popen('lscpu').readlines()

并将'Socket(s)'值和'Core(s) per socket'值相乘以获得物理cpu的数量。同样,您可以针对multiprocessing.cpu_count()检查此号码。

我不使用Windows,所以我无法帮助你,但似乎其他人在这方面有一些想法

可以在此处找到与此相关的示例hardware_info()

答案 1 :(得分:3)

根据http://archive.richweb.com/cpu_info,确定cpu超线程有点复杂,但仍然有用。

请注意,该方法是特定于Linux的。

答案 2 :(得分:1)

在Windows上,要查看是否可以使用超线程,你可以使用pywin32做一些WMI魔术:

from __future__ import print_function
from win32com.client import GetObject

winmgmts_root = GetObject("winmgmts:root\cimv2")
cpus = winmgmts_root.ExecQuery("Select * from Win32_Processor")
for cpu in cpus:
    print('on "{}", hyperthreading is '.format(cpu.DeviceID), end='') 
    if cpu.NumberOfCores < cpu.NumberOfLogicalProcessors:
        print('active')
    else:
        print('inactive')

在我的机器上,输出为:

  

on“CPU0”,超线程处于活动状态

请参阅更多info at msdn,了解可从Win32_Processor类中获取的内容。

答案 3 :(得分:0)

  

在Windows上,要查看是否可以使用超线程,你可以使用pywin32做一些WMI魔术:

错误的想法!在我的Core2Due上(没有任何超支)它会提供相同的输出:

<on "CPU0", hyperthreading is active>

我认为您必须将代码中的字符串更改为:

if cpu.NumberOfCores < cpu.NumberOfLogicalProcessors

(没有LowerOrEqual只是降低)