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()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM