如何通过Python实现持续监控特定程序的运行状态与性能?

2026-04-19 22:312阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1934个文字,预计阅读时间需要8分钟。

如何通过Python实现持续监控特定程序的运行状态与性能?

目录

一、前言

二、使用psutil和subprocess库介绍

1.psutil库

2.subprocess库

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

四、多进程通信

一、前言

在使用Python进行系统管理和自动化任务时,psutil和subprocess库是非常实用的工具。本文将简要介绍这两个库的基本用法。

二、使用psutil和subprocess库介绍

1.psutil库

psutil是一个跨平台库,用于获取系统使用情况(如CPU、内存、磁盘、网络等)和进程信息。

2. subprocess库subprocess库用于启动和管理子进程,可以执行系统命令,与子进程进行交互。

三、使用psutil和subprocess库示例程序以下是一个简单的示例程序,展示如何使用psutil和subprocess库:

pythonimport psutilimport subprocess

使用psutil获取CPU使用率cpu_usage=psutil.cpu_percent(interval=1)print(fCPU Usage: {cpu_usage}%)

使用subprocess执行命令process=subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)stdout, stderr=process.communicate()print(stdout.decode())

四、多进程通信在使用selenium库进行网页爬取时,多进程通信是常见的需求。以下是一个使用selenium进行网页爬取的示例:

如何通过Python实现持续监控特定程序的运行状态与性能?

pythonfrom selenium import webdriverfrom multiprocessing import Process

def crawl(url): driver=webdriver.Chrome() driver.get(url) print(driver.title) driver.quit()

if __name__=='__main__': urls=['http://example.com', 'http://example.org'] processes=[] for url in urls: p=Process(target=crawl, args=(url,)) p.start() processes.append(p)

for p in processes: p.join()

目录
  • 一、前言
  • 二、使用psutil库和subprocess库介绍
    • 1.psutil 库
    • 2.subprocess 库
  • 三、使用psutil库和subprocess库示例程序
    • 四、多进程通信

      一、前言

      在使用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监控程序内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

      本文共计1934个文字,预计阅读时间需要8分钟。

      如何通过Python实现持续监控特定程序的运行状态与性能?

      目录

      一、前言

      二、使用psutil和subprocess库介绍

      1.psutil库

      2.subprocess库

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

      四、多进程通信

      一、前言

      在使用Python进行系统管理和自动化任务时,psutil和subprocess库是非常实用的工具。本文将简要介绍这两个库的基本用法。

      二、使用psutil和subprocess库介绍

      1.psutil库

      psutil是一个跨平台库,用于获取系统使用情况(如CPU、内存、磁盘、网络等)和进程信息。

      2. subprocess库subprocess库用于启动和管理子进程,可以执行系统命令,与子进程进行交互。

      三、使用psutil和subprocess库示例程序以下是一个简单的示例程序,展示如何使用psutil和subprocess库:

      pythonimport psutilimport subprocess

      使用psutil获取CPU使用率cpu_usage=psutil.cpu_percent(interval=1)print(fCPU Usage: {cpu_usage}%)

      使用subprocess执行命令process=subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)stdout, stderr=process.communicate()print(stdout.decode())

      四、多进程通信在使用selenium库进行网页爬取时,多进程通信是常见的需求。以下是一个使用selenium进行网页爬取的示例:

      如何通过Python实现持续监控特定程序的运行状态与性能?

      pythonfrom selenium import webdriverfrom multiprocessing import Process

      def crawl(url): driver=webdriver.Chrome() driver.get(url) print(driver.title) driver.quit()

      if __name__=='__main__': urls=['http://example.com', 'http://example.org'] processes=[] for url in urls: p=Process(target=crawl, args=(url,)) p.start() processes.append(p)

      for p in processes: p.join()

      目录
      • 一、前言
      • 二、使用psutil库和subprocess库介绍
        • 1.psutil 库
        • 2.subprocess 库
      • 三、使用psutil库和subprocess库示例程序
        • 四、多进程通信

          一、前言

          在使用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监控程序内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!