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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
实例讲解Python爬取网页数据
Jul 08 Python
python之信息加密题目详解
Jun 26 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
django删除表重建的实现方法
Aug 28 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
Python生成随机验证码代码实例解析
Jun 09 Python
anaconda python3.8安装后降级
Jun 11 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 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
javascript 数组操作详解
2015/01/29 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python函数返回值实例分析
2015/06/08 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python调用c++传递数组的实例
2019/02/13 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
python 操作excel表格的方法
2020/12/05 Python
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
元旦获奖感言
2014/03/08 职场文书
材料物理专业求职信
2014/09/01 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android