19 - 線程

返回主頁

📄目錄

1 多任務

以下看似一起執行,實則有先後次序

python-logo

輸出結果:

2 多線程

2.1 線程和進程

💡 一個進程默認有一個線程,進程裡面可以創建多個線程

💡 線程是依附在進程裡面的,沒有進程就沒有線程

2.2 多線程

運行時要先導入線程模塊import threading

Thread線程類參數:

  1. target:執行的任務名(要運行的函數不用添加小括號)

  2. args:以元組的形式給任務傳參

  3. kwargs:以字典的形式給任務傳參

python-logo

輸出結果:

💡 主程序入口下要做的事情:

  1. 創建子線程

  2. 開啟子線程

  3. 守護線程,必須放在start()前面。主線程執行結束,子線程也會跟着結束

  4. 阻塞主線程join():暫停的作用,等子線程執行結束後,主線程才會繼續執行,必須放在start()後面

  5. (可選)獲取線程名字

  6. (可選)更改線程名

2.3 多線程的特點

python-logo

輸出結果(每次輸出結果都不一樣,混亂是因為資源競爭)

2.4 線程之間共享資源

python-logo

輸出結果:

2.5 資源競爭

python-logo

輸出結果(第一次累加每次輸出結果都不一樣,混亂是因為資源競爭)

3 線程同步

主線程和創建的子線程之間各自執行完自己的代碼直至結束

3.1 線程等待john()

python-logo

輸出結果:

4 互斥鎖

概念:對共享數據進行鎖定,保證多個線程訪問共享數據不會出現數據錯誤問題:保證同一時刻只能有一個線程去操作

方法:

⚠️⚠️注意:這兩個方法必須成對出現,否則會形成死鎖

python-logo

輸出結果:

4.1 總結

  1. 互斥鎖也是線程同步的一種

  2. 互斥鎖的作用:保證同一個時刻只有一個線程去操作共享數據,保證共享數據不會出現錯誤問題

    1. ⚠️⚠️上鎖和釋放鎖必須成對出現,否則容易造成「死鎖」現象

    2. ⚠️⚠️死鎖:一直等待對方釋放鎖的情況。會造成應用程序停止響應,不能再處理其他任務

  3. ❗互斥鎖的缺點:會影響代碼的執行效率

導航連結:

目的地超連結
首頁返回主頁
Python學習Python學習
上一篇18 - 迭代器&生成器
下一篇20 - 進程