1. 程式人生 > >多執行緒程式設計中daemon屬性的作用python

多執行緒程式設計中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。