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 相关文章推荐
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
对numpy中轴与维度的理解
Apr 18 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
Python 列表去重去除空字符的例子
Jul 20 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
Django 项目通过加载不同env文件来区分不同环境
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获取后台Job管理的实现代码
2011/06/10 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php制作简单模版引擎
2016/04/07 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
你常见到的runtime exception
2016/09/05 面试题
中学生爱国演讲稿
2013/12/31 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
幼师求职自荐信
2014/05/31 职场文书
考勤制度通知
2015/04/25 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
自荐信大全
2019/03/21 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
oracle表分区的概念及操作
2021/04/24 Oracle