遇到了乙個大坑!
如圖,在子執行緒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 =
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)
好吧 更新一下,原因是 他的意思不是父執行緒,而是主線程,也即是設定成為守護執行緒之後,主線程退出子執行緒就退出。。。。
Python執行緒退出控制
ctypes模組控制線程退出 python中threading模組並沒有設計執行緒退出的機制,原因是不正常的執行緒退出可能會引發意想不到的後果。例如 執行緒正在持有乙個必須正確釋放的關鍵資源,鎖。執行緒建立的子執行緒,同時也將被殺掉。管理自己的執行緒,最好的處理方式是擁有乙個請求退出標誌,這樣每個執...
python 執行緒退出方法
fifo是常用的佇列,其一些常用的方法有 queue.qsize 返回佇列大小 queue.empty 判斷佇列是否為空 queue.full 判斷佇列是否滿了 queue.get block timeout 從佇列頭刪除並返回乙個item,block預設為true,表示當隊列為空卻去get的時候會...
vc中主線程等待子執行緒退出的方法
vc執行緒同步,在子執行緒中等待另一子執行緒結束,通過waitforsingleobject可以實現,但是如果在主線程中等待子執行緒結束,這個函式是無法完成要求的,因為它會造成主線程掛起,導致程式死掉。我們可以通過另乙個函式msgwaitformultipleobjects配合乙個死迴圈實現這個功能...