python 多線程重啟方法
python 多線程程序運(yùn)行中,會(huì)出現(xiàn)由于異常而導(dǎo)致某線程停止的情況,為了保證程序的穩(wěn)定運(yùn)行,需要自動(dòng)重啟down掉的線程.
python Threading類有一個(gè)setName()的方法,可以為線程設(shè)置名字。
threading.enumerate()可以獲取當(dāng)前的線程對(duì)象。
自動(dòng)重啟線程的思路如下:
1.使用setName()每個(gè)線程設(shè)置名字;
2.在初始化運(yùn)行時(shí)使用threading.enumerate()獲取當(dāng)前所有線程對(duì)象,保存為初始線程組;
3.隔一段時(shí)間使用threading.enumerate()獲取當(dāng)前所有線程對(duì)象,與初始線程組對(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)前線程名,并跟初始線程組比較,某一線程停止后自動(dòng)運(yùn)行 def checkThread(sleeptimes=180,initThreadsName=[]): for i in range(0,10080):#循環(huán)運(yùn)行 nowThreadsName=[]#用來(lái)保存當(dāng)前線程名稱 now=threading.enumerate()#獲取當(dāng)前線程名 for i in now: nowThreadsName.append(i.getName())#保存當(dāng)前線程名稱 for ip in initThreadsName: if ip in nowThreadsName: pass #當(dāng)前某線程名包含在初始化線程組中,可以認(rèn)為線程仍在運(yùn)行 else: print '==='+ip,'stopped,now restart' t=threading.Thread(target=printIP,args=(ip,))#重啟線程 t.setName(ip)#重設(shè)name t.start() time.sleep(sleeptimes)#隔一段時(shí)間重新運(yùn)行,檢測(cè)有沒(méi)有線程down if __name__ == '__main__': threads=[] initThreadsName=[]#保存初始化線程組名字 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()#獲取初始化的線程對(duì)象 for i in init: initThreadsName.append(i.getName())#保存初始化線程組名字 check=threading.Thread(target=checkThread,args=(180,initThreadsName))#用來(lái)檢測(cè)是否有線程down并重啟down線程 check.setName('Thread:check') check.start()
以上這篇python 多線程重啟方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python爬蟲實(shí)戰(zhàn)之爬取某寶男裝信息
網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則自動(dòng)瀏覽、檢索網(wǎng)頁(yè)信息的程序或者腳本。網(wǎng)絡(luò)爬蟲能夠自動(dòng)請(qǐng)求網(wǎng)頁(yè),并將所需要的數(shù)據(jù)抓取下來(lái)。本文將為大家介紹如何利用爬蟲獲取某寶男裝信息,感興趣的小伙伴可以了解一下2021-12-12詳解Python的Django框架中Manager方法的使用
這篇文章主要介紹了Python的Django框架中Manager方法的使用,包括修改初始Manager QuerySets和增加額外的Manager方法等操作,需要的朋友可以參考下2015-07-07淺談python中requests模塊導(dǎo)入的問(wèn)題
今天小編就為大家分享一篇淺談python中requests模塊導(dǎo)入的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Django跨域請(qǐng)求原理及實(shí)現(xiàn)代碼
這篇文章主要介紹了Django跨域請(qǐng)求原理及實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11