守護(hù)進(jìn)程
主進(jìn)程創(chuàng)建子進(jìn)程目的是:主進(jìn)程有一個(gè)任務(wù)需要并發(fā)執(zhí)行,那開(kāi)啟子進(jìn)程幫我并發(fā)執(zhí)行任務(wù)
主進(jìn)程創(chuàng)建子進(jìn)程,然后將該進(jìn)程設(shè)置成守護(hù)自己的進(jìn)程
關(guān)于守護(hù)進(jìn)程需要強(qiáng)調(diào)兩點(diǎn):
其一: 守護(hù)進(jìn)程會(huì)在主進(jìn)程代碼執(zhí)行結(jié)束后就終止
其二: 守護(hù)進(jìn)程內(nèi)無(wú)法再開(kāi)啟子進(jìn)程,否則拋出異常:AssertionError: daemonic processes are not allowed to have children
如果我們有兩個(gè)任務(wù)需要并發(fā)執(zhí)行,那么開(kāi)一個(gè)主進(jìn)程和一個(gè)子進(jìn)程分別去執(zhí)行就ok了,如果子進(jìn)程的任務(wù)在主進(jìn)程任務(wù)結(jié)束后,就沒(méi)有存在的必要了,那么該子進(jìn)程應(yīng)該在開(kāi)啟前就被設(shè)置成守護(hù)進(jìn)程。主進(jìn)程代碼運(yùn)行結(jié)束,守護(hù)進(jìn)程隨即終止
子進(jìn)程還沒(méi)來(lái)得及開(kāi)始就掛了
設(shè)置了守護(hù)進(jìn)程 就是不給子進(jìn)程運(yùn)行
守護(hù)進(jìn)程必須在開(kāi)啟子進(jìn)程前開(kāi)啟
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=('子進(jìn)程1',)) # 守護(hù)進(jìn)程必須在開(kāi)啟子進(jìn)程前開(kāi)啟 t.daemon = True t.start() print("主") ''' 主 '''
開(kāi)一個(gè)子進(jìn)程是為了并發(fā)任務(wù), 這個(gè)子進(jìn)程的任務(wù),在主進(jìn)程死了,這個(gè)任務(wù)就沒(méi)有意義存在,這個(gè)子進(jìn)程就應(yīng)該設(shè)置守護(hù)進(jìn)程
守護(hù)進(jìn)程練習(xí)題
在主進(jìn)程代碼執(zhí)行完畢,只要出現(xiàn)打印主進(jìn)程信息,p1就不會(huì)執(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 '''
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
