• python之守护线程


    昨天遇到一个问题 在一个python程序里面开了三个线程轮询处理三件事情,刚开始一切正常,但是下午的时候发现其中一个线程死掉了,只剩下另外两个线程在运行了,这时候也不想中断主进程,又需要系统自动把死掉的一个线程启动起来就想起了要做一个守护线程来监控三个工作线程是不是正常在工作。

    查了一下手册python线程Thread类提供了以下方法:

    • run(): 用以表示线程活动的方法。
    • start():启动线程活动。
    • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
    • isAlive(): 返回线程是否活动的。
    • getName(): 返回线程名。
    • setName(): 设置线程名。

    这样就可以在守护线程里面使用isAlive()方法判断工作线程是否存活,如果死掉的话就重新建立一个工作线程,启动起来(这里要注意不能使用原来的线程让它start(),因为这个线程已经结束了,内存中的实例已经释放掉了,所以使用这个方法会报错)下面是监控的代码

    #coding=utf-8
    import time
    from threading import Thread
    
    
    class ticker(Thread):
    	def run(self):
    		while True:
    			print time.time()
    			if (time.time() > 1470883000):
    				break
    				pass
    			time.sleep(3)			
    			pass
    		pass
    
    class moniter(Thread):
    	def run(self):
    		while True:
    			global T
    			if (T.isAlive()):
    				print 't is alive'
    			else :
    				print 't is dead'
    				T = ticker()
    				T.start()
    			print 'checking '
    			time.sleep(5)
    			pass
    		pass
    
    
    T = ticker()
    T.start()
    
    mo = moniter()
    mo.start()
    

      

  • 相关阅读:
    Redis的基本操作
    Redis下载和安装-windows
    Redis介绍
    day08 网络编程
    day07
    day06
    python day05
    Day04
    windows自带反编译chm文件
    CSS Hack表 各版本IE、chrome、firefox、opera
  • 原文地址:https://www.cnblogs.com/lijurui/p/5760396.html
Copyright © 2020-2023  润新知