1. 程式人生 > >並發編程(守護進程)

並發編程(守護進程)

sta ldr 並發執行 一行 processes odin AR env 需要

一 守護進程

主進程創建子進程,然後將該進程設置成守護自己的進程

關於守護進程需要強調兩點:

其一:守護進程會在主進程代碼執行結束後就終止

其二:守護進程內無法再開啟子進程,否則拋出異常:AssertionError: daemonic processes are not allowed to have children

如果我們有兩個任務需要並發執行,那麽開一個主進程和一個子進程分別去執行就ok了,如果子進程的任務在主進程任務結束後就沒有存在的必要了,那麽該子進程應該在開啟前就被設置成守護進程。主進程代碼運行結束,守護進程隨即終止

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from multiprocessing import Process import time def task(name): print(%s is piaoing %name) time.sleep(3) print(%s is piao end %name) if __name__ == __main__: p=Process(target=task,args=(xiaojiu,)) p.daemon=True #一定要在p.start()前設置,設置p為守護進程,禁止p創建子進程,並且父進程代碼執行結束,p即終止運行 p.start()
print() #只要終端打印出這一行內容,那麽守護進程p也就跟著結束掉了 #輸出

二 練習題

思考下列代碼的執行結果有可能有哪些情況?為什麽?

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-------
456
end456

因為 主進程死了, p1也就死了,

並發編程(守護進程)