進程、線程的概念以及多線程編程的基礎知識請參考文末給出的方式在公眾號歷史文章中查找相關文章進行閱讀。本文重點介紹線程對象daemon屬性在線程退出時產生的作用和影響。
首先,我們來看一下官方文檔對守護線程(daemon thread)的描述:
再來看一下官方文檔對線程對象daemon屬性的描述:
可知:
python的self怎么理解?1)主線程不是守護線程,daemon屬性的值為False;
2)新線程被創建時會繼承父線程daemon屬性的值;
3)主線程創建的所有子線程都默認daemon=False,如果要修改子線程daemon屬性值,必須在調用start()方法啟動線程之前進行;
4)主線程退出時會檢查是否有daemon=False的子線程,如果有則延遲退出;如果當前所有子線程的daemon都是True,則主線程直接退出,同時所有daemon=True的子線程都會被強制結束;
5)所有daemon=True的子線程有可能遭遇被強制退出,其中的資源可能無法正確釋放,從而有可能(但不一定)引發異常;
python對象類型有哪些?6)主線程結束也就意味著整個程序退出,進程結束。
以下面的代碼為例,主線程創建并啟動兩個子線程之后,直接退出,兩個daemon=True的子線程也被迫結束,但這時子線程可能正在向標準輸出控制臺輸出內容,而當前進程已結束導致標準輸出控制臺被釋放,子線程無法取得訪問權限,從而引發異常,盡管每次引發異常的時機和位置并不一樣。
運行狀態如下圖所示:
修改代碼,在程序最后增加一句sleep(1),也就是主線程創建并啟動兩個daemon=True的子線程之后,等待一秒鐘再退出,此時由于兩個子線程都已輸出完要輸出的內容并進入sleep狀態不再使用標準輸出控制臺的資源,所以子線程被強制結束時沒有引發異常。
連續多次運行結果如下圖所示,雖然結果仍不可再現(這樣的結果對于沒有使用同步機制的多線程程序是正常的),但沒有拋出異常:
python如何停止子線程,那么,如果調整子線程代碼,使得先等待一段時間,在主線程退出時子線程還沒有開始輸出,結果會怎樣呢?如下圖所示,右邊是調整后的代碼,左側是運行結果,主線程創建并啟動兩個線程之后等待一秒鐘退出,此時兩個子線程并沒有嘗試占用標準輸出控制臺的資源,被強制退出時沒有引發異常。
再例如,下面的代碼,主線程退出時強行結束兩個子線程,子線程中申請的文件對象沒有正確釋放,文件中最終寫入的內容不確定。
溫馨提示
關注本公眾號“Python小屋”,通過菜單“最新資源”==>“歷史文章”可以快速查看分專題的800篇技術文章列表(可根據關鍵字在頁面上搜索感興趣的文章),通過“最新資源”==>“微課專區”可以免費觀看300節Python微課,通過“最新資源”==>“培訓動態”可以查看近期Python培訓安排,通過“最新資源”==>“教學資源”可以查看Python教學資源。
--------董付國老師Python系列圖書--------
python def用法,1)《Python程序設計(第2版)》清華大學出版社
2)《Python可以這樣學》清華大學出版社
3)《Python程序設計基礎(第2版)》清華大學出版社
4)《中學生可以這樣學Python》清華大學出版社,配套微課:《中學生可以這樣學Python》84節微課免費觀看地址
5)《Python程序設計開發寶典》清華大學出版社
python退出線程的方法,6)《玩轉Python輕松過二級》清華大學出版社
7)《Python程序設計基礎與應用》機械工業出版社
8)《Python程序設計實驗指導書》清華大學出版社
9)《Python編程基礎與案例集錦(中學版)》電子工業出版社
《中學生可以這樣學Python》84節微課免費觀看地址
Python類的屬性。非計算機專業《Python程序設計基礎》教學參考大綱
計算機相關專業“Python程序設計”教學大綱(參考)
《Python程序設計》實驗指導書(30個實驗)
《Python程序設計基礎與應用》課后習題答案
Python課程期末考試編程題自動批卷原理與實現模板
python的數據結構、“Python小屋”免費資源匯總(截至2018年11月28日)
Python課堂上我與學生斗智斗勇已8個學期
系列教學PPT:
1900頁Python系列PPT分享一:基礎知識(106頁)
1900頁Python系列PPT分享二:Python序列(列表、元組、字典、集合)(154頁)
python中的類屬性和類方法、1900頁Python系列PPT分享三:選擇與循環結構語法及案例(96頁)
1900頁Python系列PPT分享四:字符串與正則表達式(109頁)
1900頁Python系列PPT分享五:函數設計與應用(134頁)
1900頁Python系列PPT分享六:面向對象程序設計(86頁)
1900頁Python系列PPT分享七:文件操作(132頁)
qpython,1900頁Python系列PPT分享八:異常處理結構與程序調試、測試(70頁)
報告PPT(163頁):基于Python語言的課程群建設探討與實踐
報告PPT(123頁):Python編程基礎精要
2000頁Python系列PPT分享九:(GUI編程)(122頁)
Python實驗項目1例:使用進程池統計指定范圍內素數的個數
python面向對象編程?(PPT)Python程序設計課程教學內容組織與教學方法實踐
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态