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实现爬取需要登录的网站完整示例
Aug 19 Python
Python实现二维数组输出为图片
Apr 03 Python
python2.x实现人民币转大写人民币
Jun 20 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
Pytorch之view及view_as使用详解
Dec 31 Python
PyTorch中的Variable变量详解
Jan 07 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
jQuery之选择组件的深入解析
2013/06/19 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
python获取本地计算机名字的方法
2015/04/29 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python爬取指定微信公众号文章
2018/12/20 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
高级销售求职信
2014/02/21 职场文书
门市房租房协议书
2014/12/04 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
交通安全教育心得体会
2016/01/15 职场文书