[TOC]
一、守護線程
無論是進程還是線程,都遵循:守護xx會等待主xx運行完畢后被銷毀。需要強調的是:運行完畢并非終止運行。
- 對主進程來說,運行完畢指的是主進程代碼運行完畢
- 對主線程來說,運行完畢指的是主線程所在的進程內所有非守護線程統統運行完畢,主線程才算運行完畢
1.1 詳細解釋
- 主進程在其代碼結束后就已經算運行完畢了(守護進程在此時就被回收),然后主進程會一直等非守護的子進程都運行完畢后回收子進程的資源(否則會產生僵尸進程),才會結束。
- 主線程在其他非守護線程運行完畢后才算運行完畢(守護線程在此時就被回收)。因為主線程的結束意味著進程的結束,進程整體的資源都將被回收,而進程必須保證非守護線程都運行完畢后才能結束。
1.2 守護進程演示
from threading import Thread,enumerate,currentThread
import time
'''
守護線程:
守護的是進程的運行周期,只要當前進程中一個線程在運行就會守護
'''
def task():
print('守護線程開始')
print(currentThread())
time.sleep(20)
def task2():
print('子線程 start')
time.sleep(5)
print(enumerate()) # 主線程結束了,但是 守護進程并沒有死掉
print('子線程 end')
if __name__ == '__main__':
t1 = Thread(target=task)
t2 = Thread(target=task2)
t1.setName("守護線程")
t2.setName("子線程")
t1.daemon = True # 守護線程
t2.start()
t1.start()
print('主')
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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