1. 程式人生 > >python多執行緒中daemon的屬性方法

python多執行緒中daemon的屬性方法

我們看官方介紹是這樣的:


意思就是說:這個屬性為一個布林值,表示是否為一個守護程序,且這個屬性設定必須線上程的start方法開始之前呼叫。它的值繼承自主執行緒,主執行緒的daemon為False且所有從主執行緒建立的執行緒都是daemon = False 。
下面一句說明了,python主程式只有在沒有非守護執行緒的時候才會退出。
我在用多執行緒的時候和看這些介紹的時候2個疑惑:
1.有的多執行緒主執行緒結束,其他的執行緒就結束了(thread方式)。 而有的主執行緒則阻塞等待其他執行緒執行完畢才繼續執行(threading方法)
2.主執行緒中建立的執行緒都是非守護執行緒嗎?我們都知道建立執行緒有最常用的2個方法,分別利用thread和threading模組,那麼我們用程式碼看看實際的執行情況是怎樣的。


從上圖中我們可以看到,建立的執行緒輸出的daemon是True。 可見問題2是說的不對的。 也就是說在主執行緒中用start_new_thread建立的執行緒其實是daemon=True的。這樣就可以解釋我們的主程式不會等待daemon程式執行完畢這個情況了。通過取消註釋sleep語句,我們可以看到主程式執行完畢後其他執行緒也被銷燬了。
那麼我們接下來看看利用threading模組建立的程式執行情況如何?


從上面的類方式建立的多執行緒我們可以清晰的看到,此種方式建立的為執行緒daemon=False。 且會阻塞住主執行緒的執行; 解釋就到這裡了,不知道對有同樣疑惑的你是否有所幫助。

如何區分是否為守護程序(個人理解)?如果說不是守護程序的話,則在主程序結束以後子程序並不會結束。守護程序反之。