Python多線程編程中daemon屬性的作用
轉自:http://blog.csdn.net/dongfuguo/article/details/53899426在腳本運行過程中有一個主線程,若在主線程中創建了子線程,當主線程結束時根據子線程daemon屬性值的不同可能會發生下面的兩種情況之一:
-
如果某個子線程的daemon屬性爲False,主線程結束時會檢測該子線程是否結束,如果該子線程還在運行,則主線程會等待它完成後再退出;
-
如果某個子線程的daemon屬性爲True,主線程運行結束時不對這個子線程進行檢查而直接退出,同時所有daemon值爲True的子線程將隨主線程一起結束,而不論是否運行完成。
屬性daemon的值默認爲False,如果需要修改,必須在調用start()方法啓動線程之前進行設置。另外要注意的是,上面的描述並不適用於IDLE環境中的交互模式或腳本運行模式,因爲在該環境中的主線程只有在退出Python IDLE時才終止。
import threading
import time
#繼承Thread類,創建自定義線程類
class mythread(threading.Thread):
def __init__(self, num, threadname):
threading.Thread.__init__(self, name=threadname)
self.num = num
#重寫run()方法
def run(self):
time.sleep(self.num)
print(self.num)
#創建自定義線程類對象,daemon默認爲False
t1 = mythread(1, 't1')
t2 = mythread(5, 't2')
#設置線程對象t2的daemon屬性爲True
t2.daemon = True
print(t1.daemon)
print(t2.daemon)
#啓動線程
t1.start()
t2.start()
把上面的代碼存儲爲ThreadDaemon.py文件,在IDLE環境中運行結果如下圖所示
在命令提示符環境中運行結果如下圖所示。
可以看到,在命令提示符環境中執行該程序時,線程t2沒有執行結束就跟隨主線程一同結束了,因此並沒有輸出數字5。