Python守護進程實現(xiàn)過程詳解
這篇文章主要介紹了Python守護進程實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
如果你設(shè)置一個線程為守護線程,就表示你在說這個線程是不重要的,在進程退出的時候,不用等待這個線程退出。如果你的主線程在退出的時候,不用等待那些子線程完成,那就設(shè)置這些線程的daemon屬性。即在線程開始(thread.start())之前,調(diào)用setDeamon()函數(shù),設(shè)定線程的daemon標(biāo)志。(thread.setDaemon(True))就表示這個線程“不重要”。
如果你想等待子線程完成再退出,那就什么都不用做,或者顯示地調(diào)用thread.setDaemon(False),設(shè)置daemon的值為false。新的子線程會繼承父線程的daemon標(biāo)志。整個Python會在所有的非守護線程退出后才會結(jié)束,即進程中沒有非守護線程存在的時候才結(jié)束。
看下面的例子:
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"
結(jié)果:
main thread start fun main thread end end fun
結(jié)論:程序在等待子線程結(jié)束,才退出了。
設(shè)置: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"
結(jié)果:
main thread start fun main thread end
結(jié)論:程序在主線程結(jié)束后,直接退出了。 導(dǎo)致子線程沒有運行完。
守護進程可以通過調(diào)用isAlive(), 來監(jiān)視其他線程是否是存活的。
如果死掉的話就重新建立一個工作線程,啟動起來(這里要注意不能使用原來的線程讓它start(),因為這個線程已經(jīng)結(jié)束了,內(nèi)存中的實例已經(jīng)釋放掉了,所以使用這個方法會報錯)。
#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()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PyTorch中torch.matmul()函數(shù)常見用法總結(jié)
torch.matmul()也是一種類似于矩陣相乘操作的tensor連乘操作。但是它可以利用python中的廣播機制,處理一些維度不同的tensor結(jié)構(gòu)進行相乘操作,這篇文章主要介紹了PyTorch中torch.matmul()函數(shù)用法總結(jié),需要的朋友可以參考下2023-04-04
Python PaddlePaddle機器學(xué)習(xí)之求解線性模型
這篇文章主要介紹了Python PaddlePaddle機器學(xué)習(xí)之求解線性模型,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定參考價值,需要的小伙伴可以參考一下2022-08-08
解讀opencv中cv2.imread()返回值為None問題及解決
這篇文章主要介紹了解讀opencv中cv2.imread()返回值為None問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Python SQLAlchemy基本操作和常用技巧(包含大量實例,非常好)
這篇文章主要介紹了Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量實例,非常好的一個學(xué)習(xí)SQLAlchemy的教程,需要的朋友可以參考下2014-05-05
Python編程二分法實現(xiàn)冒泡算法+快速排序代碼示例
這篇文章主要介紹了Python編程二分法實現(xiàn)冒泡算法+快速排序代碼示例,具有一定借鑒價值,需要的朋友可以參考下2018-01-01

