python對多執行緒提供了很好的支援,python中多執行緒相關的模組包括:thread,threading,queue。可以方便地支援建立執行緒、互斥鎖、訊號量、同步等特性。
1. thread:多執行緒的底層支援模組,除了其中提供的 lock 原語外,一般不建議使用。
2. threading:基於 thread 模組,將一些執行緒的操作物件化,該模組提供下列類:
3. queue:實現了多生產者(producer)、多消費者(consumer)的佇列,支援鎖原語,能夠在多個執行緒之間提供很好的同步支援。提供的類:
python執行緒系列包括以下部分:
本文將介紹python執行緒中的主角,threading.thread 物件。
thread in python
1.1 thread物件的建立
通過例項化thread型別獲得乙個thread物件:
threading.thread(name=none, target=none, args=(), kwargs={})
引數的含義:
1.2 thread物件的方法
t.getname()
返回執行緒當前的名字。
t.setname(name)
設定執行緒的名字,執行緒的名稱並不要求唯一。
t.isalive()
判斷這個執行緒是否還在執行中(active)——已經呼叫了start() 而 run() 還沒有執行結束。
t.isdaemon()
判斷執行緒是不是乙個daemon執行緒,初始狀態下,執行緒 t1 只有在建立自己的執行緒 t0 是daemon時,自己才是daemon的。
t.setdaemon(daemonic)
把執行緒的daemon標誌設為daemonic(真或假)
daemon 執行緒是指,即使這個執行緒 t 的狀態是 active,python也可以終止 t(可能是通過終止 t 所在的程序);非daemon執行緒沒有終止前,python會一直保持執行直到其終止。
setdaemon()需要在start()之前呼叫。
t.join(timeout=none)
這個函式需要注意,比如在乙個執行緒 t1 的執行流程中呼叫 t2.join(),則 t1 阻塞直到 t2 執行緒執行結束,如果指定 timeout,則 t1 最多阻塞timeout秒,否則 t1 將一直等下去。
join()只能在start()之後呼叫;
t.run()
執行緒通過 run() 呼叫傳入的主函式 target,不要直接呼叫run(),而是呼叫start()函式,start()函式會呼叫run()。
t.start()
開始執行緒執行
python執行緒執行的流程
1. 建立乙個執行緒 t= threading.thread(),此時新建立的執行緒並不會立即執行;
2. 如果想要將 t 設定為守護執行緒,在呼叫 t.start() 之前呼叫 t.setdaemon(true);否則忽略本步;
3. 呼叫 t.start(),此時執行緒開始執行,狀態更新為 active。更具體的,start() 會進一步呼叫 run() 函式,run() 函式再去呼叫建立執行緒物件時傳入的主函式 target,從而讓執行緒有了執行的具體內容;
4. 當執行緒中的主函式執行完成或遇到未處理的異常時,執行緒終止執行;daemon執行緒也可能因為所在程序終止而被python終止。
Python多執行緒(1) 介紹
python對多執行緒提供了很好的支援,python中多執行緒相關的模組包括 thread,threading,queue。可以方便地支援建立執行緒 互斥鎖 訊號量 同步等特性。1.thread 多執行緒的底層支援模組,除了其中提供的 lock 原語外,一般不建議使用。2.threading 基於 ...
Python標準庫 1 介紹
標準庫包含了幾種不同型別的庫。首先是那些核心語言的資料型別庫,比如數字和列表相關的庫。在核心語言手冊裡只是描述數字和列表的編寫方式,以及它的排列,而沒有定義它的語義。換一句話說,核心語言手冊只是定義語法和優先順序之類,並沒有定義對這些型別的功能上的操作。其次標準庫包含了一些內建函式和異常處理物件,在...
推薦系統 1 介紹
介紹 協同過濾 cf 協同過濾中的高階主題 advanced topics in cf 基於內容的推薦系統 contented based recommendation 基於知識的推薦系統 knowledge based recommendation 序列化推薦系統 sequential recom...