python并發(fā)編程多進程之守護進程原理解析
守護進程
主進程創(chuàng)建子進程目的是:主進程有一個任務(wù)需要并發(fā)執(zhí)行,那開啟子進程幫我并發(fā)執(zhí)行任務(wù)
主進程創(chuàng)建子進程,然后將該進程設(shè)置成守護自己的進程
關(guān)于守護進程需要強調(diào)兩點:
其一:守護進程會在主進程代碼執(zhí)行結(jié)束后就終止
其二:守護進程內(nèi)無法再開啟子進程,否則拋出異常:AssertionError: daemonic processes are not allowed to have children
如果我們有兩個任務(wù)需要并發(fā)執(zhí)行,那么開一個主進程和一個子進程分別去執(zhí)行就ok了,如果子進程的任務(wù)在主進程任務(wù)結(jié)束后,就沒有存在的必要了,那么該子進程應(yīng)該在開啟前就被設(shè)置成守護進程。主進程代碼運行結(jié)束,守護進程隨即終止
子進程還沒來得及開始就掛了
設(shè)置了守護進程 就是不給子進程運行
守護進程必須在開啟子進程前開啟
from multiprocessing import Process
import time
def task(name):
print("%s is running" % name)
time.sleep(3)
print("%s is done" % name)
if __name__ == "__main__":
t = Process(target=task, args=('子進程1',))
# 守護進程必須在開啟子進程前開啟
t.daemon = True
t.start()
print("主")
'''
主
'''
開一個子進程是為了并發(fā)任務(wù), 這個子進程的任務(wù),在主進程死了,這個任務(wù)就沒有意義存在,這個子進程就應(yīng)該設(shè)置守護進程
守護進程練習(xí)題
在主進程代碼執(zhí)行完畢,只要出現(xiàn)打印主進程信息,p1就不會執(zhí)行或者死掉
from multiprocessing import Process
import time
def foo():
print(123)
time.sleep(1)
print("end123")
def bar():
print(456)
time.sleep(3)
print("end456")
if __name__ == '__main__':
p1=Process(target=foo)
p2=Process(target=bar)
p1.daemon=True
p1.start()
p2.start()
print("main-------")
'''
main-------
end456
'''
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python利用itchat庫向好友或者公眾號發(fā)消息的實例
今天小編就為大家分享一篇Python利用itchat庫向好友或者公眾號發(fā)消息的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
python標(biāo)準(zhǔn)庫模塊之json庫的基礎(chǔ)用法
json庫是處理JSON格式的Python標(biāo)準(zhǔn)庫,json庫主要包括兩類函數(shù),操作函數(shù)和解析函數(shù),下面這篇文章主要給大家介紹了關(guān)于python標(biāo)準(zhǔn)庫模塊之json庫的基礎(chǔ)用法,需要的朋友可以參考下2022-06-06
python BlockingScheduler定時任務(wù)及其他方式的實現(xiàn)
這篇文章主要介紹了python BlockingScheduler定時任務(wù)及其他方式的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

