python 多線(xiàn)程重啟方法
python 多線(xiàn)程程序運(yùn)行中,會(huì)出現(xiàn)由于異常而導(dǎo)致某線(xiàn)程停止的情況,為了保證程序的穩(wěn)定運(yùn)行,需要自動(dòng)重啟down掉的線(xiàn)程.
python Threading類(lèi)有一個(gè)setName()的方法,可以為線(xiàn)程設(shè)置名字。
threading.enumerate()可以獲取當(dāng)前的線(xiàn)程對(duì)象。
自動(dòng)重啟線(xiàn)程的思路如下:
1.使用setName()每個(gè)線(xiàn)程設(shè)置名字;
2.在初始化運(yùn)行時(shí)使用threading.enumerate()獲取當(dāng)前所有線(xiàn)程對(duì)象,保存為初始線(xiàn)程組;
3.隔一段時(shí)間使用threading.enumerate()獲取當(dāng)前所有線(xiàn)程對(duì)象,與初始線(xiàn)程組對(duì)比,如果某個(gè)name缺失,則重新start。
下面舉個(gè)例子:
#coding:utf-8
import threading
list_ip=['1.1.1.1','2.2.2.2','3.3.3.3'] #一組ip列表
def printIP(ip):
print ip
#每180s獲取當(dāng)前線(xiàn)程名,并跟初始線(xiàn)程組比較,某一線(xiàn)程停止后自動(dòng)運(yùn)行
def checkThread(sleeptimes=180,initThreadsName=[]):
for i in range(0,10080):#循環(huán)運(yùn)行
nowThreadsName=[]#用來(lái)保存當(dāng)前線(xiàn)程名稱(chēng)
now=threading.enumerate()#獲取當(dāng)前線(xiàn)程名
for i in now:
nowThreadsName.append(i.getName())#保存當(dāng)前線(xiàn)程名稱(chēng)
for ip in initThreadsName:
if ip in nowThreadsName:
pass #當(dāng)前某線(xiàn)程名包含在初始化線(xiàn)程組中,可以認(rèn)為線(xiàn)程仍在運(yùn)行
else:
print '==='+ip,'stopped,now restart'
t=threading.Thread(target=printIP,args=(ip,))#重啟線(xiàn)程
t.setName(ip)#重設(shè)name
t.start()
time.sleep(sleeptimes)#隔一段時(shí)間重新運(yùn)行,檢測(cè)有沒(méi)有線(xiàn)程down
if __name__ == '__main__':
threads=[]
initThreadsName=[]#保存初始化線(xiàn)程組名字
for ip in list_ip:
t=threading.Thread(target=printIP,args=(ip,))
t.setName(ip)
threads.append(t)
for t in threads:
t.start()
init=threading.enumerate()#獲取初始化的線(xiàn)程對(duì)象
for i in init:
initThreadsName.append(i.getName())#保存初始化線(xiàn)程組名字
check=threading.Thread(target=checkThread,args=(180,initThreadsName))#用來(lái)檢測(cè)是否有線(xiàn)程down并重啟down線(xiàn)程
check.setName('Thread:check')
check.start()
以上這篇python 多線(xiàn)程重啟方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python中多線(xiàn)程的創(chuàng)建及基本調(diào)用方法
- Python多線(xiàn)程編程(二):?jiǎn)?dòng)線(xiàn)程的兩種方法
- python實(shí)現(xiàn)多線(xiàn)程的兩種方式
- python使用多線(xiàn)程不斷刷新網(wǎng)頁(yè)的方法
- Python 多線(xiàn)程的實(shí)例詳解
- 深入理解 Python 中的多線(xiàn)程 新手必看
- Python用threading實(shí)現(xiàn)多線(xiàn)程詳解
- Python多線(xiàn)程原理與用法詳解
- python回調(diào)函數(shù)中使用多線(xiàn)程的方法
相關(guān)文章
Python + OpenCV 實(shí)現(xiàn)LBP特征提取的示例代碼
這篇文章主要介紹了Python + OpenCV 實(shí)現(xiàn)LBP特征提取的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
基于python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的瀏覽器引擎
瀏覽器引擎是用來(lái)處理、渲染和顯示網(wǎng)頁(yè)內(nèi)容的核心組件,其主要任務(wù)是將用戶(hù)輸入的URL所代表的網(wǎng)頁(yè)資源加載并呈現(xiàn)出來(lái),通常包括HTML、CSS、JavaScript以及各種多媒體內(nèi)容,本文給大家介紹了如何基于python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的瀏覽器引擎,需要的朋友可以參考下2024-10-10
ZABBIX3.2使用python腳本實(shí)現(xiàn)監(jiān)控報(bào)表的方法
今天小編就為大家分享一篇ZABBIX3.2使用python腳本實(shí)現(xiàn)監(jiān)控報(bào)表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
python用什么編輯器進(jìn)行項(xiàng)目開(kāi)發(fā)
在本篇文章里小編給大家整理的是一篇關(guān)于python開(kāi)發(fā)用的編輯器詳細(xì)介紹,有需要的朋友們可以參考下哎。2020-06-06
Python2.x利用commands模塊執(zhí)行Linux shell命令
這篇文章主要介紹了Python2.x利用commands模塊執(zhí)行Linux shell命令 的相關(guān)資料,需要的朋友可以參考下2016-03-03
對(duì)Python3 goto 語(yǔ)句的使用方法詳解
今天小編就為大家分享一篇對(duì)Python3 goto 語(yǔ)句的使用方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

