如果 process/application 在 Win 上是 运行,则每隔 X 毫秒检查一次

Check every X-milliseconds if process/application is running on Win

我想每 500 毫秒检查一次 process/application 是否为 运行 (Windows 10)。代码应该非常快速且资源高效!

我的代码是这样的,但是如何构建 500 毫秒。psutil 是最快最好的方法吗?谢谢。

import psutil

for p in psutil.process_iter(attrs=['pid', 'name']):

if "excel.exe" in (p.info['name']).lower():
    print("Application is running", (p.info['name']).lower())
else:
    print("Application is not Running")

首先,psutil是一个很不错的库。它具有 C 绑定,因此您将无法获得更快的速度。

import psutil
import time


def print_app():
    present = False

    for p in psutil.process_iter(attrs=['pid', 'name']):
        if "excel.exe" in (p.info['name']).lower():
            present = True

    print(f"Application is {'' if present else 'not'} present")

start_time = time.time()
print_app()
print("--- %s seconds ---" % (time.time() - start_time))

你可以知道需要多少时间。 0.06sec 对我来说。

如果你想每 0.5 秒执行一次,你可以简单地输入一个 time.sleep 因为 0.5 >> 0.06.

然后你可以写这样的代码:

import psutil
import time


def print_app():
    present = False

    for p in psutil.process_iter(attrs=['pid', 'name']):
        if "excel.exe" in (p.info['name']).lower():
            present = True

    print(f"Application is {'' if present else 'not'} present")

while True:
    print_app()
    sleep(0.5)

PS:我更改了您的代码以检查您的应用程序是否为 运行 而无需打印。这使代码更快,因为 print 需要一点时间。

这样怎么样:

import psutil
import time


def running(pname):
    pname = pname.lower()
    for p in psutil.process_iter(attrs=['name']):
        if pname in p.info['name'].lower():
            print(f'{pname} is running')
            return # early return
    print(f'{pname} is not running')


while True:
    running('excel.exe')
    time.sleep(0.5)