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字符串替换的2种方法
Nov 30 Python
Python3里的super()和__class__使用介绍
Apr 23 Python
python生成器表达式和列表解析
Mar 10 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
用Python实现随机森林算法的示例
Aug 24 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python中的Elasticsearch操作汇总
Oct 30 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
如何让python的运行速度得到提升
Jul 08 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python requests库参数提交的注意事项总结
Mar 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程序的方法小结
2012/02/23 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
Django框架中方法的访问和查找
2015/07/15 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
2019/04/29 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
编辑个人求职信范文
2013/09/21 职场文书
保护水资源的标语
2014/06/17 职场文书
党员查摆剖析材料
2014/10/10 职场文书
承兑汇票延期证明
2015/06/23 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js