Python線程的生命周期你知道多少,一文幫你全部搞清楚

2020-12-14 品位集結號

今天和大家聊聊有關Python線程的相關知識,大家都知道線程是有生命周期的,因為當線程被創建運行之後,它並不是一直處於執行狀態的,每個線程都會有一個由出生到死亡的過程,而對於Python而言,它的生命周期共有5個狀態,這五個狀態分別是新建、就緒、運行、阻塞和死亡

今天咱們就聊聊Python的這五個生命周期狀態吧!

首先,咱們來看一下Python線程生命周期中的新建狀態和就緒狀態

在Python中如何創建線程咱們上次已經詳細聊過了,大家都知道當創建了一個Thread對象或Thread子類的對象後,這個線程就處於新建狀態,此時處於新建狀態的線程並不會直接被執行,而是需要調用start()函數才能運行,當調用start()函數運行後,此時,該線程就會處於生命周期的第二個狀態也就是就緒狀態,此時Python解釋器就會為其創建方法調用棧和程序計數器,大家要知道,其實處於繼續狀態的線程並沒有開始運行,而只是表示這個線程可以運行了,是處於準備運行狀態,只有當Python解釋器真正對其進行調度會才會正式運行

還有一點大家要注意,對於線程的啟動在Python中調用的是start()方法,並不是run()方法,因此在讓線程處於就緒狀態時不要調用run()方法,實際上,調用start()方法啟動線程,此時系統也就是Python解釋器會把run()方法當作線程執行體進行處理。

然後,咱們再來看一下Python線程生命周期中的運行狀態和阻塞狀態

上面咱們已經說到了線程的第二個狀態:就緒狀態,此時如果處於就緒狀態的線程如果獲得了CPU,就是執行咱們上面所說的run()方法的線程執行體,此時這個線程就會處於運行狀態。

當然,對於一個線程運行後,這個線程不會永遠都處於運行狀態,因為如果有優先級更高的線程就會將這個線程進行中斷,從而去執行更高優先級的線程,線程調度的細節其實是取決於底層平臺所採用的策略的。

當處於運行狀態的線程被中斷後,這個線程就會進入阻塞狀態,那麼發生什麼條件才會進入阻塞狀態呢?比如線程調用sleep()方法時該線程就會處於休眠狀態從而就會放棄所佔用的資源,還有如果線程調用了一個阻塞式IO方法,此時在該方法返回之前,這個線程也會被阻塞;還有一個線程如果獲得一個鎖對象時,那麼這個鎖對象如果正在被其他線程持有時,此時這個線程也會處於阻塞狀態;還有如果線程在等待某個通知時也會進入阻塞狀態。

最後,咱們再來看一下Python線程生命周期中的最後一個線程死亡狀態

線程何時才會進入死亡狀態呢?注意有兩種情況出現時就會進行死亡狀態,第一種情況是當run()方法或代表線程執行體的target函數執行完成,線程正常結束;第二種情況是線程拋出一個未捕獲的Exception或Error時,線程也會進入死亡狀態。

當然,為了測試某個線程是否已經死亡,也可以調用線程對象的is_alive()方法,當線程處於就緒、運行和阻塞三種狀態時,該方法將會返回True,當然,當線程處於新建、死亡兩種狀態時,is_alive()方法將返回False。

好啦,上面就是有關Python線程生命周期的所有內容,可能會有些晦澀,但大家細細品味一下,就會對於Python線程生命周期中的五個狀態就會深入了解了!

敬請關注「品位集結號」,為您帶來意外的小收穫!

相關焦點

  • Python並發編程很簡單,一文幫你搞清如何創建線程類
    對於Python的並發編程相關的東東,相信通過上次咱們的探討,大家已經比較清楚了,對於Python創建線程的方式主要有兩種,這個上次咱們也已經說過了哦,第一種是使用threading模塊的Thread類的構造器來創建線程,這種方式上次咱們已經詳細討論過了哦,這次呢,咱們就重點和大家來聊聊第二種方式吧
  • 計算機的多線程生命周期解析
    人生起起落落,眼一睜一閉就過去了。這就是人的生命周期。在計算機世界中也是如此。你的電腦是不是每隔一段時間就要換掉它,並不是說它不能用了,只是配置已經跟不上時代的步伐了。人都一定年齡之後都會退休下來。肯定是你沒錢換或你不捨得它。直到你的電腦開不了機,使用不了,你的電腦也就走完這「機生」了。上面提到了人生的起落、電腦的使用壽命,從而得知一個特徵:那就是有始有終!開始到結束這一流程。
  • 付費的知識星球要過期了,python 教你怎麼辦
    python 爬蟲的常用技巧總結,帶你輕鬆入門,今天補上一篇實戰指南,爬取知識星球裡某個星球的所有數據,對,你沒有聽錯,是所有數據,包括了內容、問答、評論、圖片、文件、甚至是誰點了贊!當然,本篇文章需要你有一點 python 基礎,如果沒有的話,建議你先收藏,去找一些教程學習一下這門工具人語言。好了,廢話不多說,馬上開始。首先,導入所需要的包:
  • Python基礎進階之海量表情包多線程爬蟲功能的實現
    這篇文章主要介紹了Python基礎進階之海量表情包多線程爬蟲,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下一、前言在我們日常聊天的過程中會使用大量的表情包
  • 手把手 | 嫌Python太慢?並行運算Process Pools三行代碼給你4倍...
    從您想處理的一系列文件(或其他數據)開始2. 編寫一個處理一個數據的輔助函數3. 用for循環調動輔助函數,一個一個的去處理數據讓我們用1000張圖片來測試這個程序,看看運行時間是多少。程序運行時間8.9秒,但是計算機的運算資源佔用了多少呢?
  • Python安裝可視化繪圖庫,你真的會了嗎?一文告訴你全部
    其實關於這個問題,咱們以前已經專門討論過了哦,在這就不詳細說啦,原因就是因為這些鏡像默認的是國外的鏡像源哦,而國內大部分所使用的網絡是不能直接訪問國外的哦,當然啦,除非你翻牆哦,好啦,其實國內也有很多鏡像源的,這裡咱們就以清華的鏡像源為例來替換上面的指令吧:這樣運行上面指令後,就會調用清華的鏡像源,就會自動安裝matplotlib的最細版本哦。
  • 易立德:什麼是零部件生命周期管理?一文讀懂!
    產品生命周期管理即PLM,全稱product lifecycle management,從字面意思可以看出,PLM系統的核心任務是進行「產品生命周期管理」。在PLM系統中,零部件也有生命周期,反映零部件的階段和狀態。
  • python爬蟲100個入門項目
    >12新浪微博分布式爬蟲分享13python爬蟲教程,帶你從零到一14豆瓣讀書的爬蟲15鏈家網和貝殼網房價爬蟲16雪球網股票超級爬蟲17Python爬蟲,京東自動登錄,在線搶購商品爬蟲的時候對Json數據的解析66秒爬,python爬蟲中的多線程,多進程,協程67爬取下來的數據怎麼保存?
  • 8Manage:關於供應商生命周期管理,你了解多少?
    8Manage:關於供應商生命周期管理,你了解多少?進行供應商生命周期管理可以有效縮短交貨期,提高產品質量,降低採購成本,提升企業在市場競爭中的應變能力和競爭力。可以說,供應商生命周期管理對於企業整個供應鏈至關重要。隨著供應鏈模式的改變,僅僅用ERP系統管理供應商數據的傳統方式已經逐漸不適應現代企業的發展需求。
  • Async Python 竟不比sync Python 快,怎麼回事?
    吞吐量對於吞吐量(即:請求/秒),主要影響因素不是異步和同步,而是用本地代碼替換了多少Python代碼。簡而言之,你能替換的對性能敏感的Python代碼越多,性能就越好。這是歷史悠久的Python性能策略(另請參考numpy)。
  • OpenStack Ussuri只支持Python3,你該怎麼辦?
    原標題:OpenStackUssuri只支持Python3,你該怎麼辦?在Ussuri的發布周期中,OpenStack放棄了對Python2的所有支持。所有的項目都已經完成了CI作業的更新,使它們能在Python3下工作。這一成果使軟體能夠刪除所有Python2測試以及隨之進行的配置。
  • 一篇文章幫你搞定Python異常處理
    中,錯誤觸發的異常如下Python中異常種類在python中不同的異常可以用不同的類型(python中統一了類與類型,類型即類)去標識,不同的類對象標識不同的異常,一個異常標識一種錯# 觸發IndexErrorl=['run1','aa']
  • Python最佳經典學習路線
    如何學習Python python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例) (1)Python3入門,數據類型,字符串 (2)判斷/循環語句,函數,
  • python初學者必看的學習路線 Python是近幾年比較火的程式語言
    Python是近幾年比較火的程式語言之一,因為人工智慧的火爆,讓很多人都想從事python開發。很多零基礎學員在學習python的時候都會走一些彎路,下面小編就為大家分享python學習路線圖,幫助零基礎學員在學習的時候少走彎路。 很多人都在問Python學習步驟應該如何安排?
  • AMD線程撕裂者PRO全部型號和規格亮相
    中關村在線消息:今日外媒VideoCardz透露了AMD線程撕裂者PRO系列的全部型號、規格,比現有的線程撕裂者系列高出不少。AMD線程撕裂者PRO全部型號和規格亮相AMD線程撕裂者主要面向發燒遊戲玩家、遊戲直播、視頻編輯等,提供24核心、32核心、64核心三種配置,內存支持四通道DDR4-3200,支持ECC錯誤校驗,但僅限桌面級的UDIMM規格,最大容量256GB,同時支持最多64條PCIe
  • 購物裡的優惠套路,你知道多少?幾招幫你搞清楚!
    但其中一商家通過這些微博微信渠道開展優惠券的活動,標價105,優惠券是40元,這樣你花65買了這款杯子,但實際上該杯子在商家的同平臺上只需要58元。也就是說推廣的費用還是會均勻的分攤到每個消費者的帳單上。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • Python圖表繪製進階,圖例和標題你真的會添加嗎?一文講透
    在Python的圖表繪製中,圖例和標題是兩個重要的組件,尤其在繪圖區域出現多個圖形時,如果這些圖形不添加說明,那麼對於圖表受眾人員來說,就會很難識別出這些圖形中的主要內容,因此這就顯示出了圖例的重要性,因為圖例可以標記每個圖形所代表的內容;同樣,如果想讓受眾人員搞清楚繪圖區域中的內容所代表的意思
  • 學習Python對辦公真的有用嗎?用經驗告訴你答案
    今天來聊一聊學習python的事情,相信很多人都看到過朋友圈出現的python廣告,抑或是各種公眾號推出的python學習課堂,並且大多數都以「學會python讓你辦公效率直線提升,升職加薪一路狂飆」為賣點來進行宣傳,那麼,我這裡就要提出一個問題了。
  • 「你要搞清楚」英語怎麼說?
    這個口語表達的意思就是「搞明白,弄清某事」,一般用在否定句裡表示「搞不懂,搞不清楚」。例句I just can't get my head around this idea.我沒搞懂這個想法。再來看一個類似的表達:get sth straight get sth straight 這個短語一是表示把某事捋順了、搞明白;二是表示(不拐彎抹角而)直奔主題,也就是我們常說的開門見山、打開天窗說亮話,其中sth一般用it、this等指代。