PSutil 返回已停止警告的模块



我不能为这个问题做一个可重复的例子;请仔细检查我的逻辑是否有误解,或者我是否遗漏了什么。

我正在尝试编写一个脚本来检查应该不断运行的 python 应用程序,如果它停止工作,请给我发送电子邮件。我正在使用psutil来检查正在运行的进程。这是我的函数,用于检查有问题的程序是否正在运行(我定期调用此函数(。

def programRunning():
    cmdLines = []
    for pid in psutil.pids():
            p = psutil.Process(pid)
            if p.name() == "pythonw.exe":
                    cmdLines.append(p.cmdline()[-1])
           #scheduler.py is my script
    if any('scheduler' in process for process in cmdLines):
        return True  
    else:
        return False

现在,我的主程序产生了错误并停止运行,但是此函数仍然返回True,就像我得到的cmdLines list一样(除其他外(:

['C:\Users\..omitted..\scheduler.py', ..omitted..]

所以我显然错过了一些我对psutils如何工作的理解。知道它是什么以及如何解决它吗?

'psutil.pids((' 的文档说:

返回当前正在运行的 PID 的列表。要遍历所有进程并避免竞争条件,应首选process_iter((。

因此,听起来您的流程正在生成的pids列表和您在迭代期间到达该项目之间退出。

您可能想使用psutil.process_iter它说:

返回一个迭代器,为本地计算机上所有正在运行的进程生成一个 Process 类实例。每个实例只创建一次,然后缓存到内部表中,每次生成元素时都会更新该表。将检查缓存进程实例的身份,以便在 PID 被另一个进程重用时安全,在这种情况下,将更新缓存的实例。

相关内容

  • 没有找到相关文章

最新更新