守護進程
注意:daemon=True 必須寫在 start()之前

import time from multiprocessing import Process def func(): for i in range(20): time.sleep(0.5) print('in func') def func2(): print('start : func2') time.sleep(5) print('end : func2') if __name__ == '__main__': p = Process(target=func) p.daemon = True # 表示設置p為一個守護進程 p.start() p2 =Process(target=func2) p2.start() print('in main') time.sleep(3) print('finished') p2.join()
守護線程

import time from threading import Thread def daemon_func(): while True: time.sleep(0.5) print('守護線程') def son_func(): print('start son') time.sleep(5) print('end son') t = Thread(target=daemon_func) t.daemon = True #守護 t.start() Thread(target=son_func).start() time.sleep(3) print('主線程結束')
守護進程和守護線程的區別
無論是進程還是線程, 都遵循: 守護xxx 會等待主xxx 運行完畢后被銷毀
守護進程 :只會守護到主進程的代碼結束
守護線程 :會守護所有其他非守護線程的結束
運行完畢井非終止運行
對主進程來說, 運行完畢指的是主進程代碼運行完畢
對主線程來說, 運行完畢指的是主線程所在的進程內所有非守護線程統統運行完畢, 主線程才算運行完畢
守護進程:
主進程和子進程互不干擾
主進程執行完畢之后程序不會結束,會等待所有的子進程結束之后才結束
守護進程 :
是一個子進程,守護的是主進程
結束條件 : 主進程的代碼結束,守護進程也結束
主進程的代碼結束,守護進程結束
主進程要回收守護進程(子進程)的資源
主進程等待其他所有子進程結束
主進程回收所有子進程的資源
守護線程:
1.主線程會等待子線程的結束而結束
2.守護線程會隨着主線程的結束而結束
守護線程會守護主線程和所有的子線程
守護線程問題:
1.主線程需不需要回收子線程的資源
不需要,線程資源屬於進程,所以進程結束了,線程的資源自然就被回收了
2.主線程為什么要等待子線程結束之后才結束
主線程結束意味着進程進程,進程結束,所有的子線程都會結束
要想讓子線程能夠順利執行完,主線程只能等
3.守護線程到底是怎么結束的
主線程結束了,主進程也結束,守護線程被主進程的結束結束掉了
守護進程問題
為什么主進程要等待子進程結束之后才結束?
因為主進程要負責給子進程回收一些系統資源