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使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
python加载自定义词典实例
Dec 06 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
Python流程控制常用工具详解
Feb 24 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 Python
Python list列表删除元素的4种方法
Nov 01 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
Linux下编译redis和phpredis的方法
2016/04/07 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
vue中如何使用ztree
2018/02/06 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
Python字符串处理函数简明总结
2015/04/13 Python
python实现统计代码行数的方法
2015/05/22 Python
python实现解数独程序代码
2017/04/12 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
python实现贪吃蛇小游戏
2020/03/21 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
Django REST 异常处理详解
2020/07/15 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
安全目标责任书
2014/07/22 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
支行行长竞聘报告
2014/11/06 职场文书
就业意向协议书
2015/01/29 职场文书
奠基仪式致辞
2015/07/30 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书