python 多线程重启方法


Posted in Python onFebruary 18, 2019

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 __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 相关文章推荐
python使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
python发送伪造的arp请求
Jan 09 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
关于python多重赋值的小问题
Apr 17 Python
python调用webservice接口的实现
Jul 12 Python
python实发邮件实例详解
Nov 11 Python
python如何实现单链表的反转
Feb 10 Python
Django与pyecharts结合的实例代码
May 13 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
详解Python自动化之文件自动化处理
Jun 21 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 #Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 #Python
对Python3使运行暂停的方法详解
Feb 18 #Python
解决python线程卡死的问题
Feb 18 #Python
Python中时间datetime的处理与转换用法总结
Feb 18 #Python
对python中的try、except、finally 执行顺序详解
Feb 18 #Python
python调用matlab的m自定义函数方法
Feb 18 #Python
You might like
php 远程关机操作的代码
2008/12/05 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP 正则表达式小结
2015/02/12 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
javascript优先加载笔记代码
2008/09/30 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
js表单验证实例讲解
2016/03/31 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
EL表达式截取字符串的函数说明
2017/09/22 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
python解析xml文件实例分析
2015/05/27 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
python 基于opencv实现图像增强
2020/12/23 Python
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
商务英语应届生自我鉴定
2013/12/08 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
员工考核评语大全
2014/04/26 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Python集合的基础操作
2021/11/01 Python