遇到了一個大坑!
如圖,在子線程ThreadFunc退出之后,ThreadFunc2依舊在運行。。。 根本不會結束
但是官方文檔中說明了,只要設置了daemon不為None 就能設置子線程是守護線程,這樣線程退出的時候,子線程也會退出
如果不是 None,daemon 參數將顯式地設置該線程是否為守護模式。 如果是 None (默認值),線程將繼承當前線程的守護模式屬性。
但是子線程的子線程似乎不會退出!
只能使用這種方式 ⬇
import threading
import time
def ThreadFunc2(s,flag):
while True:
if flag['exit'] == 1:
print("啊! 我死了")
return
print("ThreadFunc2")
time.sleep(1)
def ThreadFunc(s):
flag = {'exit':0}
threading.Thread(target=ThreadFunc2,args=(s,flag),daemon=True).start()
time.sleep(2)
flag['exit'] = 1
print("ThreadFunc 退出")
return
s = [1]
threading.Thread(target=ThreadFunc,args=(s,),daemon=True).start()
for i in range(0,500):
print(s)
time.sleep(1)
好吧 更新一下,原因是 他的意思不是父線程,而是主線程,也即是設置成為守護線程之后,主線程退出子線程就退出。。。。