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