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实现简单HTML表格解析的方法
Jun 15 Python
python安装Scrapy图文教程
Aug 14 Python
django启动uwsgi报错的解决方法
Apr 08 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
python批量下载抖音视频
Jun 17 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Python内置类型性能分析过程实例
Jan 29 Python
Python requests上传文件实现步骤
Sep 15 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
python和Appium的移动端多设备自动化测试框架
Apr 26 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中几种常见的超时处理全面总结
2012/09/11 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
vue ssr 指南详读
2018/06/29 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
回调函数的意义以及python实现实例
2017/06/20 Python
python文本数据相似度的度量
2018/03/12 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
美国留学经济担保书
2014/05/20 职场文书
2014年招生工作总结
2014/11/26 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS