本文**:
threading用於提供執行緒相關的操作。執行緒是應用程式中工作的最小單元,它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。
threading 模組建立在 _thread 模組之上。thread 模組以低階、原始的方式來處理和控制線程,而 threading 模組通過對 thread 進行二次封裝,提供了更方便的 api 來處理執行緒。
繼承式呼叫
thread方法:
t.start() : 啟用執行緒
t.getname() : 獲取執行緒的名稱
t.setname() : 設定執行緒的名稱
t.name : 獲取或設定執行緒的名稱
t.is_alive() : 判斷執行緒是否為啟用狀態
t.isalive() :判斷執行緒是否為啟用狀態
t.setdaemon() 設定為後台執行緒或前台執行緒(預設:false);通過乙個布林值設定執行緒是否為守護執行緒,必須在執行start()方法之前才可以使用。如果是後台執行緒,主線程執行過程中,後台執行緒也在進行,主線程執行完畢後,後台執行緒不論成功與否,均停止;如果是前台執行緒,主線程執行過程中,前台執行緒也在進行,主線程執行完畢後,等待前台執行緒也執行完成後,程式停止
t.isdaemon() : 判斷是否為守護執行緒
t.ident :獲取執行緒的識別符號。執行緒識別符號是乙個非零整數,只有在呼叫了start()方法之後該屬性才有效,否則它只返回none
t.join() :逐個執行每個執行緒,執行完畢後繼續往下執行,該方法使得多執行緒變得無意義
t.run() :執行緒被cpu排程後自動執行執行緒物件的run方法
threading.rlock & threading.lock
我們使用執行緒對資料進行操作的時候,如果多個執行緒同時修改某個資料,可能會出現不可預料的結果,為了保證資料的準確性,引入了鎖的概念。
threading.rlock和threading.lock 的區別
rlock允許在同一執行緒中被多次acquire。而lock卻不允許這種情況。 如果使用rlock,那麼acquire和release必須成對出現,即呼叫了n次acquire,必須呼叫n次的release才能真正釋放所占用的鎖。
協程又叫微執行緒,從技術的角度來說,「協程就是你可以暫停執行的函式」。如果你把它理解成「就像生成器一樣」,那麼你就想對了。執行緒和程序的操作是由程式觸發系統介面,最後的執行者是系統;協程的操作則是程式設計師。
協程存在的意義:對於多執行緒應用,cpu通過切片的方式來切換執行緒間的執行,執行緒切換時需要耗時(儲存狀態,下次繼續)。協程,則只使用乙個執行緒,在乙個執行緒中規定某個**塊執行順序。
協程的適用場景:當程式中存在大量不需要cpu的操作時(io),適用於協程。
Python 程序 執行緒 協程
程序和執行緒之間的關係 執行緒是屬於程序的,執行緒執行在程序空間內,同一程序所產生的執行緒共享同一記憶體空間,當程序退出時該程序所產生的執行緒都會被強制退出並清除。執行緒可與屬於同一程序的其它執行緒共享程序所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在執行中必不可少的資訊 如程式計數...
python執行緒池 協程
python的執行緒雖然是真正的執行緒,但直譯器執行 時,有乙個gil鎖 global interpreter lock,任何python執行緒執行前,必須先獲得gil鎖,然後,每執行100條位元組碼,直譯器就自動釋放gil鎖,讓別的執行緒有機會執行。這個gil全域性鎖實際上把所有執行緒的執行 都給...
Python 程序,執行緒, 協程
程序是系統進行資源分配和排程的乙個獨立單位 最小單位 程序的幾個狀態 空 新建 建立執行乙個程式的新程序,可能的事件有 新的批處理作業 互動登入 終端使用者登入到系統 作業系統因為提供一項服務而建立 由現有的程序派生等。新建 就緒 作業系統準備好再接納乙個程序時,把乙個程序從新建態轉換為就緒態。就緒...