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