併發:時間段內多個程式輪流執行
並行:同乙個時刻不同cpu同時執行
執行緒:程式執行中,執行**的乙個分支。每個執行至少都有乙個執行緒.
執行緒是作業系統排程資源的基礎單位
1.建立
import threading
方法:thread
group: 執行緒組,目前只能使用none
target: 執行的目標任務名,無需()
args 是乙個元祖《位置引數》
kwargs 是乙個字典《關鍵字引數》
name: 執行緒名,一般不用設定
2.啟動執行緒執行
執行緒名.start()進行執行
獲取當前程式中的執行緒列表
threading.enumrate()
多執行緒執行的順序是無序的
主線程在所有子執行緒結束後才結束
daemon執行緒/守護執行緒
所有的daemon執行緒會隨著最後乙個 非demon的退出 而全部退出
setdaemo(true) 將子執行緒設定為守護執行緒,跟隨主線程一起退出
用於:多執行緒 + 提前退出 的時候,子執行緒沒有執行完成,程式無法退出
檢視執行緒的標識:print(threading.current_thread())
檢視當前程式所有存活的執行緒列表
如果列表中1個,就是只剩主線程
判斷執行緒是否還存活
執行緒物件.is_alive()
阻塞等待子執行緒執行完成
執行緒物件.join()
建立執行緒方法:1.使用threading 2.自定義執行緒,繼承threading
方法2過程:
1.繼承threading.thread類及其子類
2.重寫其中run方法 子執行緒會從run開始執行 run中儲存的是子執行緒執行的**
建立子執行緒 建立子類的物件 物件.start()
4.如果子執行緒需要更多的引數 重寫init方法,並且在其中呼叫super(父類)
5.strat() != run() strat的作用:建立執行子執行緒,在子執行緒中呼叫run()
主要目的是將執行緒和執行緒會執行的**封裝在乙個類中
多執行緒共享全域性變數,用global進行注釋
執行緒是程式內部的一條執行線索《執行緒》
可能造成的問題: 資源競爭/資料競爭
原因:多個執行緒同時修改乙個共享的全域性資源,造成資料丟失
解決辦法:多執行緒同步-保持秩序 join和互斥鎖
互斥鎖:對共享的資料鎖定,保證同一時刻只能有乙個執行緒操作
目的:保證多執行緒共享資料不出現資源競爭和資料錯誤
格式:#建立 能保證同一時間點只有乙個執行緒能夠占有鎖
mutex = threading.lock()
#申**鎖 如果沒鎖定可以占有,如果已經被鎖定阻塞等待
mutex.acquire() //鎖進入locked狀態
#解鎖 用完一定解鎖
mutex.release() //鎖進入unlocked狀態
好處:確保執行緒從頭到尾執行
壞處:由多執行緒變化成單執行緒模式執行,鎖用不好容易死鎖
死鎖概念:一直等對方釋放鎖的情景就是死鎖
原因:1.資源的釋放方式不對
2.多工多資源申請,出現互相等待
影響:造成程式無法執行,一直被阻塞
關於執行緒順序,正常是主線程和子執行緒是同步執行,互不相關。
進行輸出,檢視執行緒結束的順序
守護執行緒設定後,主線程結束,子執行緒也會結束
設定守護後,看結束效果
通過join可以阻塞等待子執行緒執行完畢
設定join,看效果
在子執行緒開啟後輸出乙個話結束主線程,看以上三種方式的結果
python高階 多執行緒
1.1 獲取執行緒數 import threading import time def fun time.sleep 1 print hello t threading.thread target fun t.start print threading.enumerate while true le...
Python高階(多執行緒)
多執行緒結構 import threading def worker 子執行緒要執行的具體邏輯 函式 print threading t1 threading.current thread time.sleep 9 通過休眠模擬子執行緒非同步邏輯 print t1.getname new t thr...
多執行緒05 執行緒同步
1 執行緒同步 2 執行緒不安全案例 public class testthreadsynchronized class ticketwindow implements runnable private void buy try catch interruptedexception e system...