你們看多線程部分的時候確定看到過daemon這個屬性,當我在百度了一圈後也沒發現有比較好的解釋(或者你們對這個解釋都很是清楚),因而本身經過代碼和官方介紹瞭解它,進行了一些總結 給你們一些參考。python
首先咱們看官方的介紹是這樣的:微信
A boolean value indicating whether this thread is a daemon thread (True) or not (False). This must be set before start() is called, otherwise RuntimeError is raised. Its initial value is inherited from the creating thread; the main thread is not a daemon thread and therefore all threads created in the main thread default to daemon = False.多線程
The entire Python program exits when no alive non-daemon threads are left.this
大概的意思就是說:這個屬性爲一個布爾值,表示是否爲一個守護進程,且這個屬性設置必須在線程的start方法開始以前調用。它的值繼承自主線程,主線程的daemon爲False且全部從主線程建立的線程都是daemon = False的。線程
下面一句說明了,python主程序只有在沒有非守護線程的時候纔會退出。繼承
我在用多線程的時候和看這些介紹的時候2個疑惑:進程
有的多線程主線程結束,其餘的線程就結束了(thread方式)。 而有的主線程則阻塞等待其餘線程執行完畢才繼續執行(threading方法)it
主線程中建立的線程都是非守護線程嗎?thread
咱們都知道建立線程有最經常使用的2個方法,分別利用thread和threading模塊百度
那麼咱們用代碼看看實際的執行狀況是怎樣的
代碼中咱們能夠看到,建立的線程輸出的daemon是True。 可見問題2是說的不對的。 也就是說在主線程中用start_new_thread建立的線程實際上是daemon=True的。這樣就能夠解釋咱們的主程序不會等待daemon程序執行完畢這個狀況了。經過取消註釋sleep語句,咱們能夠看到主程序執行完畢後其餘線程也被銷燬了。
那麼咱們接下來看看利用threading模塊建立的程序執行狀況如何?
從上面的類方式建立的多線程咱們能夠清晰的看到,此種方式建立的爲線程daemon=False。 且會阻塞住主線程的執行
解釋就到這裏了,不知道有一樣疑惑的夥伴兒們對你是否有一些幫助。
程序猿、工程師精彩分享
微信號:studypython
歡迎關注公衆號 "人生苦短我用Python"
--------------------------------------