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

  

时间: 2024-11-06 07:34:02

python之守护线程的相关文章

python开发线程:线程&守护线程&全局解释器锁

一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python.org/3/library/threading.html?highlight=threading# 二 开启线程的两种方式 #方式一 from threading import Thread import time def sayhi(name): time.sleep(2) print('%s

Python线程:线程的调度-守护线程

守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.在python中建议使用的是thread.demon = true 使用这个方法可以检测数据合法性 守护线程使用的情况较少,但并非无用,举例来说,Python的垃圾回收.内存管理等线程都是守护线程.还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数.超时时间.状态等等. setDaemon方法的详细说明: # 属性进行封装 以方便对数据传入值

python全栈开发基础【第二十四篇】(利用threading模块开线程、join与守护线程、GIL与Lock)

一多线程的概念介绍 threading模块介绍 threading模块和multiprocessing模块在使用层面,有很大的相似性. 二.开启多线程的两种方式 创建线程的开销比创建进程的开销小,因而创建线程的速度快. #开启进程的第一种方式 from multiprocessing import Process from threading import Thread import os import time def work(): print('<%s> is running'%os.g

python网络编程--线程(锁,GIL锁,守护线程)

1.线程 1.进程与线程 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率.很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上: 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了. 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行. 如果这两个缺点理解比较困难的话,举个现实的例子也许你就清楚

Python之路(第四十二篇)线程相关的其他方法、join()、Thread类的start()和run()方法的区别、守护线程

一.线程相关的其他方法 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getName(): 返回线程名. # setName(): 设置线程名. ? threading模块提供的一些方法: # threading.currentThread(): 返回当前的线程对象. # threading.enumerate(): 返回一个包含正在运行的线程的list.正在运行指线程启动后.结束前,不包括启动前和终止后的线程. # threading.activeCount(

Python多线程的创建,相关函数和守护线程的理解

一:多线程的创建 threading库创建线程有两种方式,函数式和继承式    1)函数式 def func(): print 'Starting' print 'Ending' t=threading.Thread(name='func',target=func) t.start() 2)继承式 class ThreadClass(threading.Thread): def __init__(self, group = None, target = None, name = None, ar

【python】-- 继承式多线程、守护线程

继承式多线程 1.定义 继承式多线程是自己自定义类,去继承theading.Tread这个类,通过类实例.start()启动,去执行run方法中的代码. import threading import time class MyThread(threading.Thread): # 继承threading.Thread """继承式多线程""" def __init__(self, n): threading.Thread.__init__(se

Python学习之路:守护线程

守护线程:只起到守护主线程的作用,主线程退出守护线程也跟着退出. 1 import threading,time 2 3 def run(n): 4 print("task",n) 5 time.sleep(2) 6 print("task done",n) 7 8 start_time = time.time() 9 t_objs = [] 10 for i in range(50): 11 t = threading.Thread(target=run,args

python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)

前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: 场景一:小编(主)先吃完了,xiaoming(客)和xiaowang(客)还没吃完,这种场景会导致结账的人先走了,剩下两个小伙伴傻眼了... 场景二:小编(主)先吃完了,xiaoming和xiaowang还没吃饱,一起结账走人. 场景三:小编(主)先等xiaoming和xiaowang吃饱了,小编最后结账一起走人. 主线程与子线程 场景一:主线程已经结束了,子线程还在跑 1.我们把thread1.