首頁>技術>

今天和大家聊聊有關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執行緒生命週期中的五個狀態就會深入瞭解了![再見]

26
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 再清楚不過了,JVM逃逸分析,你一定得知道