Windows系统下如何每隔500毫秒高效检测指定进程是否运行?
psutil 是否为该需求的最优方案?
是,psutil 完全符合你要求的「运行速度快、资源占用极低」的需求:
- 它底层直接调用 Windows 原生 API 枚举进程,性能和手写 C++ 调用 Win32 API 的差距可以忽略,单次全量枚举进程的耗时通常不到 10ms,远小于 500ms 的检测间隔,不会有性能压力
- 不需要自行处理 Windows API 调用的各类兼容性问题,开发成本极低,代码可维护性好
- 运行时资源占用极低,休眠间隔期 CPU 占用为 0,检测阶段的 CPU 开销几乎可以忽略
完善后的定时检测代码
你原有代码存在逻辑错误:遍历每个进程时都会单独打印一次状态,会导致大量错误的「未运行」输出。修改后的代码如下,已经加入 500ms 定时检测逻辑:
import psutil import time # 要检测的目标进程名(不区分大小写) TARGET_PROCESS = "excel.exe" while True: process_running = False # 迭代进程列表,匹配到目标就提前终止遍历,降低开销 for p in psutil.process_iter(attrs=["name"]): if p.info["name"] and TARGET_PROCESS == p.info["name"].lower(): process_running = True break # 统一输出单次检测结果 if process_running: print(f"Application is running: {TARGET_PROCESS}") else: print("Application is not running") # 等待500毫秒后执行下一次检测 time.sleep(0.5)
可选极致优化方案
如果要进一步降低检测开销,可以增加 PID 缓存逻辑:
- 首次匹配到目标进程后缓存它的 PID
- 后续检测优先校验该 PID 对应的进程是否存在、且名称匹配,校验通过就不用全量枚举进程
- 只有 PID 校验失败时才执行全量枚举,能把单次检测耗时降到 1ms 以内
内容的提问来源于stack exchange,提问作者gerrard87
相关产品推荐
相关产品推荐

