Python守护进程实现过程详解
这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。即在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志。(thread.setDaemon(True))就表示这个线程“不重要”。
如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用thread.setDaemon(False),设置daemon的值为false。新的子线程会继承父线程的daemon标志。整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。
看下面的例子:
import time import threading def fun(): print "start fun" time.sleep(2) print "end fun" print "main thread" t1 = threading.Thread(target=fun,args=()) #t1.setDaemon(True) t1.start() time.sleep(1) print "main thread end"
结果:
main thread start fun main thread end end fun
结论:程序在等待子线程结束,才退出了。
设置:setDaemon 为True
import time import threading def fun(): print "start fun" time.sleep(2) print "end fun" print "main thread" t1 = threading.Thread(target=fun,args=()) t1.setDaemon(True) t1.start() time.sleep(1) print "main thread end"
结果:
main thread start fun main thread end
结论:程序在主线程结束后,直接退出了。 导致子线程没有运行完。
守护进程可以通过调用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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
PyTorch中torch.matmul()函数常见用法总结
torch.matmul()也是一种类似于矩阵相乘操作的tensor连乘操作。但是它可以利用python中的广播机制,处理一些维度不同的tensor结构进行相乘操作,这篇文章主要介绍了PyTorch中torch.matmul()函数用法总结,需要的朋友可以参考下2023-04-04
Python PaddlePaddle机器学习之求解线性模型
这篇文章主要介绍了Python PaddlePaddle机器学习之求解线性模型,文章围绕主题展开详细的内容介绍,具有一定参考价值,需要的小伙伴可以参考一下2022-08-08
解读opencv中cv2.imread()返回值为None问题及解决
这篇文章主要介绍了解读opencv中cv2.imread()返回值为None问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
这篇文章主要介绍了Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下2014-05-05


最新评论