python 多執行緒程式執行中,會出現由於異常而導致某執行緒停止的情況,為了保證程式的穩定執行,需要自動重啟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):#迴圈執行
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 __namwww.cppcns.come__ == '__main__':
threads=
initthreadsname=#儲存初始化執行緒組名字
for ip in list_ip:
t=threading.thread(target=printip,args=(ip,))
t.setname(ip)
threads.a程式設計客棧ppend(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 多執行緒重啟方法
本文位址: /jiaoben/python/252517.html
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒詳解 Python多執行緒詳解
前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...
python程式多執行緒 PYTHON多執行緒
在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...