1. 程式人生 > >守護程序(瞭解)

守護程序(瞭解)

守護程序

主程序建立子程序,然後將該程序設定成守護自己的程序,守護程序伴隨著子程序的結束而結束。

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

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

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

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

from multiprocessing import Process
import time


def task(name):
    print("%s is running" % name)
    time.sleep(2)
    # p = Process(target=time.sleep, args=(3,))    # 守護程序不能再有子程序
    # p.start()


if __name__ == "__main__":
    p = Process(target=task, args=("子程序1", ))
    p.daemon = True  # 守護程序 一定要在p.start()前設定,設定p為守護程序,禁止p建立子程序,並且父程序程式碼執行結束,p即終止執行
    p.start()

    p.join()
    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-------   # 這一行打印出,說明主程序執行完。p1就立馬死了,可能會有123列印
456
end456