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中的代码编码格式转换问题
Jun 10 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
老生常谈python的私有公有属性(必看篇)
Jun 09 Python
Python探索之Metaclass初步了解
Oct 28 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Flask之flask-script模块使用
Jul 26 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 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重定向的3种方式
2013/03/07 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
软件测试有哪些?什么是配置项?
2012/02/12 面试题
优秀毕业生推荐信范文
2014/03/07 职场文书
天网工程实施方案
2014/03/26 职场文书
感恩教育活动总结
2014/05/05 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
导游词之包公祠
2019/11/25 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
Python开发简易五子棋小游戏
2022/05/02 Python