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实现的udp协议Server和Client代码实例
Jun 04 Python
python提取字典key列表的方法
Jul 11 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
对python3标准库httpclient的使用详解
Dec 18 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 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将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php学习之变量的使用
2011/05/29 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
深入理解Node module模块
2018/03/26 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python语法快速入门指南
2015/10/12 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python super的使用方法及实例详解
2019/09/25 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python中count函数简单用法
2020/01/05 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
大专生自我鉴定范文
2013/10/01 职场文书
大学生自我评价怎样写好
2013/10/23 职场文书
学生的自我鉴定范文
2013/10/24 职场文书
校园活动策划方案
2014/06/13 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
企业团队精神心得体会
2016/01/19 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang