Python守护进程实现过程详解
这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。即在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志。(thread.setDaemon(True))就表示这个线程“不重要”。
如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用thread.setDaemon(False),设置daemon的值为false。新的子线程会继承父线程的daemon标志。整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。
看下面的例子:
importtime importthreading deffun(): print"startfun" time.sleep(2) print"endfun" print"mainthread" t1=threading.Thread(target=fun,args=()) #t1.setDaemon(True) t1.start() time.sleep(1) print"mainthreadend"
结果:
mainthread startfun mainthreadend endfun
结论:程序在等待子线程结束,才退出了。
设置:setDaemon为True
importtime importthreading deffun(): print"startfun" time.sleep(2) print"endfun" print"mainthread" t1=threading.Thread(target=fun,args=()) t1.setDaemon(True) t1.start() time.sleep(1) print"mainthreadend"
结果:
mainthread startfun mainthreadend
结论:程序在主线程结束后,直接退出了。导致子线程没有运行完。
守护进程可以通过调用isAlive(),来监视其他线程是否是存活的。
如果死掉的话就重新建立一个工作线程,启动起来(这里要注意不能使用原来的线程让它start(),因为这个线程已经结束了,内存中的实例已经释放掉了,所以使用这个方法会报错)。
#coding=utf-8 importtime fromthreadingimportThread classticker(Thread): defrun(self): whileTrue: printtime.time() if(time.time()>1470883000): break pass time.sleep(3) pass pass classmoniter(Thread): defrun(self): whileTrue: globalT if(T.isAlive()): print'tisalive' else: print'tisdead' T=ticker() T.start() print'checking' time.sleep(5) pass pass T=ticker() T.start() mo=moniter() mo.start()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。