python 多執行緒重啟方法

2022-09-27 13:06:10 字數 1729 閱讀 1640

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分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...