守護進程和守護線程的區別


 

 

守護進程

注意: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.守護線程到底是怎么結束的
主線程結束了,主進程也結束,守護線程被主進程的結束結束掉了


守護進程問題
為什么主進程要等待子進程結束之后才結束?
因為主進程要負責給子進程回收一些系統資源



 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM