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实现子类调用父类的方法
Nov 10 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
Pycharm学习教程(1) 定制外观
May 02 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
Python中常用的内置方法
Jan 28 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
用Python绘制漫步图实例讲解
Feb 26 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 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
我的论坛源代码(一)
2006/10/09 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
详解Python的Django框架中的通用视图
2015/05/04 Python
深入理解Python中装饰器的用法
2016/06/28 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
django项目搭建与Session使用详解
2018/10/10 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python实现简单的五子棋游戏
2020/09/01 Python
python的setattr函数实例用法
2020/12/16 Python
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
演讲稿开场白
2014/01/13 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
Java 多态分析
2022/04/26 Java/Android