wmi调用返回意外的COM错误错误
问题描述:
我的代码如下,每60秒在一个线程中运行。wmi调用返回意外的COM错误错误
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()