欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)監(jiān)控一個(gè)程序的運(yùn)行情況

 更新時(shí)間:2023年05月10日 17:02:59   作者:風(fēng)吹落葉花飄蕩  
這篇文章主要為大家介紹了Python如何實(shí)現(xiàn)監(jiān)控一個(gè)程序的運(yùn)行情況,然后視情況將進(jìn)程殺死并重啟,文中的示例代碼簡(jiǎn)潔易懂,需要的可以參考一下

一、前言

在使用selenium庫(kù)爬取一些小東西,經(jīng)常出現(xiàn)程序進(jìn)入死循環(huán)的情況。導(dǎo)致一個(gè)簡(jiǎn)簡(jiǎn)單單的需求,居然花了3天沒跑完,很是氣憤。遂給寫了一個(gè)監(jiān)聽程序,當(dāng)爬蟲死機(jī)一定時(shí)間的時(shí)候,就把這只爬蟲拍死,然后根據(jù)日志從上次爬的地方重啟一只新爬蟲。

二、使用psutil庫(kù)和subprocess庫(kù)介紹

當(dāng)涉及到與操作系統(tǒng)進(jìn)行交互的時(shí)候,Python中的 psutil 和 subprocess 庫(kù)都是非常有用的工具。

1.psutil 庫(kù)

psutil(process and system utilities)是一個(gè)跨平臺(tái)的庫(kù),提供了許多有用的系統(tǒng)和進(jìn)程信息。通過 psutil 庫(kù),我們可以輕松地獲取操作系統(tǒng)的各種信息,如 CPU 使用情況、內(nèi)存使用情況、磁盤使用情況等等。此外,psutil 還可以用于獲取和操作進(jìn)程信息,如獲取進(jìn)程的 CPU 使用情況、內(nèi)存使用情況、打開的文件和網(wǎng)絡(luò)連接等等。

以下是 psutil 庫(kù)的一些主要功能:

  • 獲取 CPU 使用率、內(nèi)存使用率、磁盤使用情況、網(wǎng)絡(luò)信息等等。
  • 獲取系統(tǒng)啟動(dòng)時(shí)間、用戶數(shù)、主機(jī)名等等系統(tǒng)信息。
  • 獲取進(jìn)程的 PID、CPU 使用情況、內(nèi)存使用情況、線程數(shù)等等信息。
  • 操作進(jìn)程,如發(fā)送信號(hào)、終止進(jìn)程等等。

2.subprocess 庫(kù)

subprocess 庫(kù)是用于在 Python 程序中執(zhí)行外部命令的標(biāo)準(zhǔn)庫(kù)。通過 subprocess 庫(kù),我們可以啟動(dòng)一個(gè)子進(jìn)程來執(zhí)行外部命令,然后在 Python 程序中捕獲并處理該命令的輸出。subprocess 庫(kù)提供了多個(gè)函數(shù),如 Popen、call、check_call 等等,以便于我們執(zhí)行外部命令和處理命令的輸出。

以下是 subprocess 庫(kù)的一些主要功能:

  • 啟動(dòng)子進(jìn)程并執(zhí)行外部命令。
  • 在子進(jìn)程中捕獲并處理命令的輸出。
  • 設(shè)置子進(jìn)程的環(huán)境變量、工作目錄等等屬性。
  • 通過管道連接多個(gè)子進(jìn)程,從而實(shí)現(xiàn)數(shù)據(jù)流的處理。

總之,psutil 和 subprocess 是 Python 中非常有用的庫(kù),可以幫助我們輕松地獲取和操作系統(tǒng)和進(jìn)程的各種信息,以及執(zhí)行外部命令和處理命令的輸出。在編寫需要與操作系統(tǒng)進(jìn)行交互的 Python 程序時(shí),這兩個(gè)庫(kù)是不可或缺的。

三、使用psutil庫(kù)和subprocess庫(kù)示例程序

要監(jiān)控一個(gè)程序的運(yùn)行情況并在需要時(shí)將其殺死并重啟,可以使用 Python 的 psutil 模塊來實(shí)現(xiàn)。psutil 模塊可以訪問系統(tǒng)進(jìn)程和系統(tǒng)資源的信息,并提供了一些操作系統(tǒng)的 API 接口。具體來說,我們可以使用 psutil 模塊來獲取程序的 PID(進(jìn)程ID),并在需要時(shí)將進(jìn)程殺死并重啟。

下面是一個(gè)簡(jiǎn)單的示例,演示了如何使用 psutil 模塊監(jiān)控程序的運(yùn)行情況,并在需要時(shí)將進(jìn)程殺死并重啟:

import psutil
import subprocess
import time

# 啟動(dòng)程序
p = subprocess.Popen(['python', 'your_program.py'])

while True:
    # 檢查程序是否在運(yùn)行
    if psutil.pid_exists(p.pid) and psutil.pid_exists(p.pid) in psutil.pids():
        # 如果程序在運(yùn)行,等待一段時(shí)間后再檢查
        time.sleep(5)
    else:
        # 如果程序已經(jīng)退出,重啟程序
        p = subprocess.Popen(['python', 'your_program.py'])

在這個(gè)示例中,我們首先使用 subprocess.Popen() 啟動(dòng)程序,并獲取程序的 PID。然后在一個(gè)無限循環(huán)中,不斷檢查程序是否在運(yùn)行。如果程序在運(yùn)行,我們會(huì)等待一段時(shí)間后再檢查。如果程序已經(jīng)退出,我們就使用 subprocess.Popen() 重新啟動(dòng)程序。這樣,即使程序崩潰了,也能夠在很短的時(shí)間內(nèi)重新啟動(dòng)。

需要注意的是,在監(jiān)控程序運(yùn)行情況時(shí),要確保程序出現(xiàn)異常不會(huì)導(dǎo)致系統(tǒng)崩潰或造成嚴(yán)重影響。如果程序出現(xiàn)無限循環(huán)、內(nèi)存泄漏等問題,監(jiān)控程序可能只會(huì)讓問題變得更加嚴(yán)重。因此,在編寫監(jiān)控程序時(shí),要確保程序本身是健壯的,并且程序出現(xiàn)異常時(shí)能夠正確地退出。另外,要注意不要在監(jiān)控程序中占用過多的系統(tǒng)資源,以免影響其他程序的正常運(yùn)行。

四、多進(jìn)程通信

在 Python 中,可以使用 multiprocessing 庫(kù)來實(shí)現(xiàn)不同進(jìn)程之間的交互。multiprocessing 是 Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,它允許我們啟動(dòng)并發(fā)進(jìn)程,以便于同時(shí)執(zhí)行多個(gè)任務(wù)。

在這里,由于需求不是很復(fù)雜,我用了一個(gè)取巧的方法,就是用一個(gè)txt文件當(dāng)作中介,也可以了理解為池子,程序往里面丟日志。然后重啟的時(shí)候根據(jù)日志也就是爬到第幾個(gè)了,斷點(diǎn)重續(xù)。

下面程序功能是:當(dāng)程序imgico.py50s不更新的時(shí)候,重啟。

import psutil
import subprocess
import time
# 啟動(dòng)程序
p = subprocess.Popen(['python', 'imgico.py'])
preendNum=2
count=0
while True:
    # 檢查程序是否在運(yùn)行
    time.sleep(5)
    if psutil.pid_exists(p.pid) and psutil.pid_exists(p.pid) in psutil.pids():
        # 如果程序在運(yùn)行,等待一段時(shí)間后再檢查
        time.sleep(5)
    else:
        # 如果程序已經(jīng)退出,重啟程序
        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

到此這篇關(guān)于Python實(shí)現(xiàn)監(jiān)控一個(gè)程序的運(yùn)行情況的文章就介紹到這了,更多相關(guān)Python監(jiān)控程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python OpenCV特征檢測(cè)之特征匹配方式詳解

    Python OpenCV特征檢測(cè)之特征匹配方式詳解

    OpenCV中提供了兩種技術(shù)用于特征匹配,分別為Brute-Force匹配器和基于FLANN的匹配器。本文將為大家詳細(xì)介紹一下這兩種匹配方式,需要的可以參考一下
    2021-12-12
  • Python中不可錯(cuò)過的五個(gè)超有用函數(shù)

    Python中不可錯(cuò)過的五個(gè)超有用函數(shù)

    在本文中,我們用代碼詳細(xì)說明了Python中超實(shí)用的5個(gè)函數(shù)的重要作用,這些函數(shù)雖然簡(jiǎn)單,但卻是Python中功能最強(qiáng)大的函數(shù),下面一起來看看文章的詳細(xì)介紹吧,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-01-01
  • Python中往列表中插入字典時(shí),數(shù)據(jù)重復(fù)問題

    Python中往列表中插入字典時(shí),數(shù)據(jù)重復(fù)問題

    這篇文章主要介紹了Python中往列表中插入字典時(shí),數(shù)據(jù)重復(fù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 在PyTorch中實(shí)現(xiàn)可解釋的神經(jīng)網(wǎng)絡(luò)模型的方法詳解

    在PyTorch中實(shí)現(xiàn)可解釋的神經(jīng)網(wǎng)絡(luò)模型的方法詳解

    這篇文章主要為大家介紹在PyTorch如何中實(shí)現(xiàn)可解釋的神經(jīng)網(wǎng)絡(luò)模型,并為您提供使用簡(jiǎn)單的 PyTorch 接口實(shí)現(xiàn)最先進(jìn)的基于概念的模型的工具,需要的朋友可以參考下
    2023-06-06
  • Django解決frame拒絕問題的方法

    Django解決frame拒絕問題的方法

    這篇文章主要介紹了Django解決frame拒絕問題的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • numpy中的meshgrid函數(shù)的使用

    numpy中的meshgrid函數(shù)的使用

    這篇文章主要介紹了numpy中的meshgrid函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 使用Python實(shí)現(xiàn)文字轉(zhuǎn)語音并生成wav文件的例子

    使用Python實(shí)現(xiàn)文字轉(zhuǎn)語音并生成wav文件的例子

    今天小編就為大家分享一篇使用Python實(shí)現(xiàn)文字轉(zhuǎn)語音并生成wav文件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Mac PyCharm中的.gitignore 安裝設(shè)置教程

    Mac PyCharm中的.gitignore 安裝設(shè)置教程

    這篇文章主要介紹了Mac PyCharm中的.gitignore 安裝設(shè)置教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python實(shí)現(xiàn)圖書館搶座(自動(dòng)預(yù)約)功能的示例代碼

    python實(shí)現(xiàn)圖書館搶座(自動(dòng)預(yù)約)功能的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)圖書館搶座(自動(dòng)預(yù)約)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python數(shù)學(xué)建模StatsModels統(tǒng)計(jì)回歸之線性回歸示例詳解

    Python數(shù)學(xué)建模StatsModels統(tǒng)計(jì)回歸之線性回歸示例詳解

    這篇文章主要為大家介紹了Python數(shù)學(xué)建模中StatsModels統(tǒng)計(jì)回歸之線性回歸的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10

最新評(píng)論