Python多執行緒

2021-09-22 14:08:25 字數 1688 閱讀 3513

18.3 執行緒同步

18.4 執行緒佇列

18.5 習題

程式是一些列的指令集,程式是靜態的,當程式執行時,就會建立乙個程序。

執行緒是程序的基本執行單元,乙個程序至少要具有乙個執行緒。

多執行緒,就類似與作業系統中的多程序。簡單的講,就是可以同時併發執行多個任務,處理多件事情

我們可以採用兩種方式來建立執行緒:

思考:直接呼叫run與呼叫start方法有什麼不同?

執行緒的生命週期:

執行緒的生命週期可以分為以下環節:

threading.active_count(

)threading.

enumerate()

threading.current_thread(

)threading.get_ident(

)threading.main_thread(

)

執行緒物件功能:

start(

)run(

)join(timeout=

none

)name setname / getname

ident

is_alive(

)daemon isdaemon(

)/ setdaemon(

)

當多執行緒併發執行時,多執行緒間很可能操作共享成員變數,此時,就需要對共享成員變數的操作進行同步,避免出現多執行緒的併發修改而引起的意外錯誤。

我們可以通過threading.lock()獲得執行緒鎖,來實現多個執行緒對共享區域的互斥訪問。執行緒鎖提供兩個方法:

注意:要確保鎖得到有效的釋放。

當兩個或多個執行緒同時擁有自己的資源,而相互等待獲得對方資源,導致程式永遠陷入僵持狀態,這就是死鎖。

當多執行緒併發訪問共享資料時,使用執行緒鎖可以避免多執行緒對共享變數併發修改帶來的危害,但同時有可能會產生死鎖。

queue模組提供了佇列的功能,該模組具有三個類:

佇列類實現了內部的鎖機制,因此,佇列型別可以安全的用於多執行緒併發操作中。

其中,引數maxsize表示佇列的最大元素個數,如果傳遞0或者負值,則表示無限容量。如果佇列達到了最大容量,將會進行阻塞,直到有元素刪除為止。

佇列物件具有的方法如下:

qsize(

)empty(

)full(

)put(item, block=

true

, timeout=

none

)put_nowait(item) put(item,

false

)get(block=

true

, timeout=

none

)get_nowait(

) get(

false

)

1.當建立乙個執行緒時,該執行緒是前台執行緒還是後台執行緒?用**驗證一下。

2.編寫兩個執行緒,對同乙個全域性變數增加若干次(次數多一點),會出現什麼情況。

3.兩個執行緒,使用同乙個函式作為target,然後在函式定義乙個區域性變數,兩個執行緒分別對該變數自增若干次,會出現什麼情況。

4.編寫買家與賣家交易的程式,乙個錢鎖,乙個貨鎖,並造成死鎖。

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

python多執行緒詳解 Python多執行緒詳解

前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...

python程式多執行緒 PYTHON多執行緒

在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...