我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python实现监控一个程序的运行情况

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python实现监控一个程序的运行情况

一、前言

在使用selenium库爬取一些小东西,经常出现程序进入死循环的情况。导致一个简简单单的需求,居然花了3天没跑完,很是气愤。遂给写了一个监听程序,当爬虫死机一定时间的时候,就把这只爬虫拍死,然后根据日志从上次爬的地方重启一只新爬虫。

二、使用psutil库和subprocess库介绍

当涉及到与操作系统进行交互的时候,Python中的 psutil 和 subprocess 库都是非常有用的工具。

1.psutil 库

psutil(process and system utilities)是一个跨平台的库,提供了许多有用的系统和进程信息。通过 psutil 库,我们可以轻松地获取操作系统的各种信息,如 CPU 使用情况、内存使用情况、磁盘使用情况等等。此外,psutil 还可以用于获取和操作进程信息,如获取进程的 CPU 使用情况、内存使用情况、打开的文件和网络连接等等。

以下是 psutil 库的一些主要功能:

  • 获取 CPU 使用率、内存使用率、磁盘使用情况、网络信息等等。
  • 获取系统启动时间、用户数、主机名等等系统信息。
  • 获取进程的 PID、CPU 使用情况、内存使用情况、线程数等等信息。
  • 操作进程,如发送信号、终止进程等等。

2.subprocess 库

subprocess 库是用于在 Python 程序中执行外部命令的标准库。通过 subprocess 库,我们可以启动一个子进程来执行外部命令,然后在 Python 程序中捕获并处理该命令的输出。subprocess 库提供了多个函数,如 Popen、call、check_call 等等,以便于我们执行外部命令和处理命令的输出。

以下是 subprocess 库的一些主要功能:

  • 启动子进程并执行外部命令。
  • 在子进程中捕获并处理命令的输出。
  • 设置子进程的环境变量、工作目录等等属性。
  • 通过管道连接多个子进程,从而实现数据流的处理。

总之,psutil 和 subprocess 是 Python 中非常有用的库,可以帮助我们轻松地获取和操作系统和进程的各种信息,以及执行外部命令和处理命令的输出。在编写需要与操作系统进行交互的 Python 程序时,这两个库是不可或缺的。

三、使用psutil库和subprocess库示例程序

要监控一个程序的运行情况并在需要时将其杀死并重启,可以使用 Python 的 psutil 模块来实现。psutil 模块可以访问系统进程和系统资源的信息,并提供了一些操作系统的 API 接口。具体来说,我们可以使用 psutil 模块来获取程序的 PID(进程ID),并在需要时将进程杀死并重启。

下面是一个简单的示例,演示了如何使用 psutil 模块监控程序的运行情况,并在需要时将进程杀死并重启:

import psutil
import subprocess
import time

# 启动程序
p = subprocess.Popen(['python', 'your_program.py'])

while True:
    # 检查程序是否在运行
    if psutil.pid_exists(p.pid) and psutil.pid_exists(p.pid) in psutil.pids():
        # 如果程序在运行,等待一段时间后再检查
        time.sleep(5)
    else:
        # 如果程序已经退出,重启程序
        p = subprocess.Popen(['python', 'your_program.py'])

在这个示例中,我们首先使用 subprocess.Popen() 启动程序,并获取程序的 PID。然后在一个无限循环中,不断检查程序是否在运行。如果程序在运行,我们会等待一段时间后再检查。如果程序已经退出,我们就使用 subprocess.Popen() 重新启动程序。这样,即使程序崩溃了,也能够在很短的时间内重新启动。

需要注意的是,在监控程序运行情况时,要确保程序出现异常不会导致系统崩溃或造成严重影响。如果程序出现无限循环、内存泄漏等问题,监控程序可能只会让问题变得更加严重。因此,在编写监控程序时,要确保程序本身是健壮的,并且程序出现异常时能够正确地退出。另外,要注意不要在监控程序中占用过多的系统资源,以免影响其他程序的正常运行。

四、多进程通信

在 Python 中,可以使用 multiprocessing 库来实现不同进程之间的交互。multiprocessing 是 Python 标准库中的一个模块,它允许我们启动并发进程,以便于同时执行多个任务。

在这里,由于需求不是很复杂,我用了一个取巧的方法,就是用一个txt文件当作中介,也可以了理解为池子,程序往里面丢日志。然后重启的时候根据日志也就是爬到第几个了,断点重续。

下面程序功能是:当程序imgico.py50s不更新的时候,重启。

import psutil
import subprocess
import time
# 启动程序
p = subprocess.Popen(['python', 'imgico.py'])
preendNum=2
count=0
while True:
    # 检查程序是否在运行
    time.sleep(5)
    if psutil.pid_exists(p.pid) and psutil.pid_exists(p.pid) in psutil.pids():
        # 如果程序在运行,等待一段时间后再检查
        time.sleep(5)
    else:
        # 如果程序已经退出,重启程序
        p = subprocess.Popen(['python', 'imgico.py','--begin',str(endNum)])
    with open('cache.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        if len(lines)==0:
            endNum=2
        endNum = lines[len(lines) - 1].replace('\n', '')

    if preendNum==endNum:
        count+=1
    else:
        preendNum = endNum
        count=0
    if count==10:
        print('重启一次!'+str(count))
        p = subprocess.Popen(['python', 'imgico.py', '--begin', str(endNum)])
        count=0

到此这篇关于Python实现监控一个程序的运行情况的文章就介绍到这了,更多相关Python监控程序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python实现监控一个程序的运行情况

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python实现监控一个程序的运行情况

目录一、前言二、使用psutil库和subprocess库介绍1.psutil 库2.subprocess 库三、使用psutil库和subprocess库示例程序四、多进程通信一、前言在使用selenium库爬取一些小东西,经常出现程序
2023-05-12

怎么用VBS调用程序并对程序的运行情况进行监控

这篇文章将为大家详细讲解有关怎么用VBS调用程序并对程序的运行情况进行监控,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有同时要用一个CAE软件调用外部程序,但是,通过这个CAE软件调用外部程序以后,因为
2023-06-08

python如何监控某个进程内存的情况

这篇文章主要讲解了“python如何监控某个进程内存的情况”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python如何监控某个进程内存的情况”吧!python监控某个进程内存测试场景:某个
2023-06-30

Python实现监控内存使用情况和代码执行时间

我的代码的哪些部分运行时间最长、内存最多?我怎样才能找到需要改进的地方?在开发过程中,我很确定我们大多数人都会想知道这一点。本文总结了一些方法来监控 Python 代码的时间和内存使用情况,希望对大家有所帮助
2023-01-28

如何使用Python监控MySQL数据库的运行状态?(Python环境下如何实时监控MySQL数据库的运行状况?)

本篇教程介绍了使用Python监控MySQL数据库运行状态的详细方法。介绍了MySQLdb、pymysql和MySQLConnector/Python三个库,并提供了代码示例来展示如何使用它们执行查询并获取监控指标。此外,还介绍了一些通用监控指标,以及Grafana、Prometheus和Zabbix等其他监控工具。通过使用这些工具和技术,您可以有效地监控MySQL数据库,识别潜在问题并采取措施以确保其正常运行。
如何使用Python监控MySQL数据库的运行状态?(Python环境下如何实时监控MySQL数据库的运行状况?)
2024-04-02

Android编程实现监控各个程序流量的方法

本文实例讲述了Android编程实现监控各个程序流量的方法。分享给大家供大家参考,具体如下:public void getAppTrafficList(){ //获取所有的安装在手机上的应用软件的信息,并且获取这些软件里面的权限信息 Pac
2022-06-06

Shell脚本实现监控swap空间使用情况和查看占用swap的进程

#!/bin/bashecho -e `date +%y%m%d%H%M` echo -e "PIDttSwapttProc_Name"# 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信
2022-06-04

用Python的Flask框架结合MySQL写一个内存监控程序

这里以监控内存使用率为例,写的一个简单demo性程序,具体操作根据51reboot提供的教程写如下。 一、建库建表 创建falcon数据库:mysql> create database falcon character set utf8;
2022-06-04

Python进度条可视化如何实现监测程序运行速度

本篇内容介绍了“Python进度条可视化如何实现监测程序运行速度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言今天和大家分享一个进度条可
2023-06-21

ASP 健康监控的最佳实践:确保应用程序无缝运行

ASP 健康监控的最佳实践:保障应用程序顺畅运行
ASP 健康监控的最佳实践:确保应用程序无缝运行
2024-02-28

如何用Shell脚本实现监控swap空间使用情况和查看占用swap的进程

本篇内容主要讲解“如何用Shell脚本实现监控swap空间使用情况和查看占用swap的进程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用Shell脚本实现监控swap空间使用情况和查看占用
2023-06-09

一个监控Squid运行进程数并自动重启的简洁Shell脚本分享

#!/bin/sh while sleep 30 do SquidNum=`ps -ef|grep squid|grep -v grep|wc -l` #HttpNum=`netstat -an|grep 0.0.0.0:80|grep -
2022-06-04

Python实现一个简单的验证码程序

老师讲完random函数,自己写的,虽然和老师示例的不那么美观,智能,但是也自己想出来的,所以记录一下,代码就需要自己不断的自己练习,实战,才能提高啊!不然就像我们这些大部分靠自学的人,何时能学会。还有就是,这次听老师的,把自己的代码添加注
2022-06-04

用Python实现一个简单的抽奖小程序

目录写在前面 实现结果 1 数据拉取2 数据清洗、去重3 中奖数据抽取python 相关知识点总结写在前面 因为粉丝福利,所以想自己写一个抽奖小程序,用于实现粉丝抽奖结果。原本规划的比较理想:实时拉取评论用户信息数据清洗,数据去重存储
2023-05-12

如何在 Golang 中启动另一个正在运行的程序实例?

来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《如何在 Golang 中启动另一个正在运行的程序实例?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!问题内容我希望 G
如何在 Golang 中启动另一个正在运行的程序实例?
2024-04-04

利用Java如何实现计算两个程序运行的时间差

这期内容当中小编将会给大家带来有关利用Java如何实现计算两个程序运行的时间差,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、获取系统当前时间long startTime = System.curren
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录