Python 子執行緒退出孫執行緒不退出

2022-01-29 11:26:28 字數 1050 閱讀 3850

遇到了乙個大坑!

如圖,在子執行緒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配合乙個死迴圈實現這個功能...