多線程編程中daemon屬性的作用python

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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章