wmi 调用返回 Unexpected COM Error 错误
wmi call returning Unexpected COM Error error
我有如下代码,每 60 秒在一个线程中运行一次。
import wmi
import threading
CPU_DATA = {}
class CpuCollector(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.sleep_time = 60
self.conn = wmi.WMI()
def run(self):
try:
cpu_info_wql = "SELECT LoadPercentage,CurrentClockSpeed,MaxClockSpeed,NumberOfCores FROM Win32_Processor WHERE ProcessorType = 3"
while True:
cpu_info = self.conn.query(cpu_info_wql)[0]
CPU_DATA['cpu.used_perc'] = long(cpu_info.LoadPercentage)
time.sleep(self.sleep_time)
except Exception as e:
LOG.exception('Exception occured: %s' % e)
raise e
cpu_collector = CpuCollector()
cpu_collector.start()
我收到以下错误。
Exception occured: <x_wmi: Unexpected COM Error (-2147352567, 'Exception occurred.', (0, u'SWbemServicesEx', None, None, 0, -2147221008), None)>
我这里做错了什么?当我尝试从中提取数据(如 dir(self.conn))时,我的 conn 对象打印正常。
这解决了问题。
import wmi
import threading
import pythoncom
CPU_DATA = {}
class CpuCollector(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.sleep_time = 60
self.conn = wmi.WMI()
def run(self):
try:
pythoncom.CoInitialize()
self.mymethod()
except Exception as e:
LOG.exception('Exception occured: %s' % e)
raise e
def my method(self):
cpu_info_wql = "SELECT LoadPercentage,CurrentClockSpeed,MaxClockSpeed,NumberOfCores FROM Win32_Processor WHERE ProcessorType = 3"
while True:
cpu_info = self.conn.query(cpu_info_wql)[0]
CPU_DATA['cpu.used_perc'] = long(cpu_info.LoadPercentage)
time.sleep(self.sleep_time)
cpu_collector = CpuCollector()
cpu_collector.start()
我有如下代码,每 60 秒在一个线程中运行一次。
import wmi
import threading
CPU_DATA = {}
class CpuCollector(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.sleep_time = 60
self.conn = wmi.WMI()
def run(self):
try:
cpu_info_wql = "SELECT LoadPercentage,CurrentClockSpeed,MaxClockSpeed,NumberOfCores FROM Win32_Processor WHERE ProcessorType = 3"
while True:
cpu_info = self.conn.query(cpu_info_wql)[0]
CPU_DATA['cpu.used_perc'] = long(cpu_info.LoadPercentage)
time.sleep(self.sleep_time)
except Exception as e:
LOG.exception('Exception occured: %s' % e)
raise e
cpu_collector = CpuCollector()
cpu_collector.start()
我收到以下错误。
Exception occured: <x_wmi: Unexpected COM Error (-2147352567, 'Exception occurred.', (0, u'SWbemServicesEx', None, None, 0, -2147221008), None)>
我这里做错了什么?当我尝试从中提取数据(如 dir(self.conn))时,我的 conn 对象打印正常。
这解决了问题。
import wmi
import threading
import pythoncom
CPU_DATA = {}
class CpuCollector(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.sleep_time = 60
self.conn = wmi.WMI()
def run(self):
try:
pythoncom.CoInitialize()
self.mymethod()
except Exception as e:
LOG.exception('Exception occured: %s' % e)
raise e
def my method(self):
cpu_info_wql = "SELECT LoadPercentage,CurrentClockSpeed,MaxClockSpeed,NumberOfCores FROM Win32_Processor WHERE ProcessorType = 3"
while True:
cpu_info = self.conn.query(cpu_info_wql)[0]
CPU_DATA['cpu.used_perc'] = long(cpu_info.LoadPercentage)
time.sleep(self.sleep_time)
cpu_collector = CpuCollector()
cpu_collector.start()