当前位置:脚本大全 > > 正文

python开启多线程(python 多线程重启方法)

时间:2022-03-28 01:25:21类别:脚本大全

python开启多线程

python 多线程重启方法

python 多线程程序运行中,会出现由于异常而导致某线程停止的情况,为了保证程序的稳定运行,需要自动重启down掉的线程.

python Threading类有一个setName()的方法,可以为线程设置名字。

threading.enumerate()可以获取当前的线程对象。

自动重启线程的思路如下:

1.使用setName()每个线程设置名字;

2.在初始化运行时使用threading.enumerate()获取当前所有线程对象,保存为初始线程组;

3.隔一段时间使用threading.enumerate()获取当前所有线程对象,与初始线程组对比,如果某个name缺失,则重新start。

下面举个例子:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • #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 __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 多线程重启方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/b617437942/article/details/53153897

    上一篇下一篇

    猜您喜欢

    热门推荐