python 多線程重啟方法
python 多線程程序運行中,會出現(xiàn)由于異常而導致某線程停止的情況,為了保證程序的穩(wěn)定運行,需要自動重啟down掉的線程.
python Threading類有一個setName()的方法,可以為線程設置名字。
threading.enumerate()可以獲取當前的線程對象。
自動重啟線程的思路如下:
1.使用setName()每個線程設置名字;
2.在初始化運行時使用threading.enumerate()獲取當前所有線程對象,保存為初始線程組;
3.隔一段時間使用threading.enumerate()獲取當前所有線程對象,與初始線程組對比,如果某個name缺失,則重新start。
下面舉個例子:
#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獲取當前線程名,并跟初始線程組比較,某一線程停止后自動運行
def checkThread(sleeptimes=180,initThreadsName=[]):
for i in range(0,10080):#循環(huán)運行
nowThreadsName=[]#用來保存當前線程名稱
now=threading.enumerate()#獲取當前線程名
for i in now:
nowThreadsName.append(i.getName())#保存當前線程名稱
for ip in initThreadsName:
if ip in nowThreadsName:
pass #當前某線程名包含在初始化線程組中,可以認為線程仍在運行
else:
print '==='+ip,'stopped,now restart'
t=threading.Thread(target=printIP,args=(ip,))#重啟線程
t.setName(ip)#重設name
t.start()
time.sleep(sleeptimes)#隔一段時間重新運行,檢測有沒有線程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()#獲取初始化的線程對象
for i in init:
initThreadsName.append(i.getName())#保存初始化線程組名字
check=threading.Thread(target=checkThread,args=(180,initThreadsName))#用來檢測是否有線程down并重啟down線程
check.setName('Thread:check')
check.start()
以上這篇python 多線程重啟方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python + OpenCV 實現(xiàn)LBP特征提取的示例代碼
這篇文章主要介紹了Python + OpenCV 實現(xiàn)LBP特征提取的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
ZABBIX3.2使用python腳本實現(xiàn)監(jiān)控報表的方法
今天小編就為大家分享一篇ZABBIX3.2使用python腳本實現(xiàn)監(jiān)控報表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python2.x利用commands模塊執(zhí)行Linux shell命令
這篇文章主要介紹了Python2.x利用commands模塊執(zhí)行Linux shell命令 的相關資料,需要的朋友可以參考下2016-03-03

