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简单实现enum功能的方法
Apr 25 Python
Python 多线程实例详解
Mar 25 Python
python unittest实现api自动化测试
Apr 04 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
Django 大文件下载实现过程解析
Aug 01 Python
Python的Lambda函数用法详解
Sep 03 Python
python命令 -u参数用法解析
Oct 24 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
python代码能做成软件吗
Jul 24 Python
python压包的概念及实例详解
Feb 17 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缓存技术的使用说明
2011/08/06 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
JS调试必备的5个debug技巧
2014/03/07 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
使用tensorflow实现线性svm
2018/09/07 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
简单介绍django提供的加密算法
2019/12/18 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
自荐信需注意事项
2014/01/25 职场文书
食品安全检查制度
2014/02/03 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
干部外出学习心得体会
2016/01/18 职场文书
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers