文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python 多线程重启

2023-01-31 08:14

关注
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()
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯