溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python 多線程重啟方法

發(fā)布時(shí)間:2020-09-29 03:45:50 來源:腳本之家 閱讀:219 作者:DylanOOO 欄目:開發(fā)技術(shù)

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=[]#用來保存當(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è)有沒有線程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))#用來檢測(cè)是否有線程down并重啟down線程
  check.setName('Thread:check')
  check.start()

以上這篇python 多線程重啟方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI