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批量导出导入MySQL用户的方法
Nov 15 Python
对于Python装饰器使用的一些建议
Jun 03 Python
利用ctypes提高Python的执行速度
Sep 09 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
numpy中索引和切片详解
Dec 15 Python
python模仿网页版微信发送消息功能
Feb 24 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
PyQt5实现登录页面
May 30 Python
Python如何生成xml文件
Jun 04 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
python3实现简单飞机大战
Nov 29 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php格式化电话号码的方法
2015/04/24 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
javascript self对象使用详解
2016/10/18 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
python处理html转义字符的方法详解
2016/07/01 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
庆七一活动方案
2014/01/25 职场文书
远程培训的心得体会
2014/09/01 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
报案材料怎么写
2015/05/25 职场文书
国王的演讲观后感
2015/06/03 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
工作简历的自我评价
2019/05/16 职场文书
Python基础之元类详解
2021/04/29 Python
Python绘制散乱的点构成的图的方法
2022/04/21 Python