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()