使用WMI python的正在运行的进程计数很慢

问题描述 投票:0回答:1

我正在测试为某些计算机检查而制作的“简单” python程序。我正在使用wmi模块来检索信息。但是,用于计数运行进程的简单计数线程大约需要12到13秒。正在运行的进程数约为300

我想知道我是否缺少什么,因为我对此运行的速度感到有些惊讶。

  • OS:Windows 10企业版
  • Python:3.8.2 32bit
  • wmi:1.5.1
  • wxpython:4.1.0

当按下一个按钮时,会启动多个线程,但是大多数线程会立即返回数据,但是这些线程不会循环,例如流程清单。

启动我使用的线程:

newObject = countProcess()
newObject.start()

类(线程)看起来像:

class countProcess(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        my_object = dict(status='Running', result='')        
        wx.CallAfter(pub.sendMessage, 'testListener', message=2,arg2=my_object)
        pythoncom.CoInitialize()
        d = wmi.WMI(find_classes=False)
        count = 0
        for process in d.Win32_Process():
            count +=1
        my_object = dict(status='idle', result=count)        
        wx.CallAfter(pub.sendMessage, 'testListener', message=2,arg2=my_object)
        #print (count)
        del d

我是不是做错了什么,还是在WMI进程中循环很慢,我必须接受这一点?

提前感谢!

python python-3.x wxpython wmi
1个回答
0
投票

好吧,我找到了一种方法来加速很多...通过仅选择一个字段名称,现在只需4秒,而不是12到13秒!

更改中:

for process in d.Win32_Process():

to

for process in d.Win32_Process(["Name"]):

没有把戏!我不知道这会产生如此大的影响。欢迎进一步加快速度的想法!

© www.soinside.com 2019 - 2024. All rights reserved.