線程
每個進程默認都有一個線程弟疆,這個線程叫主線程哮笆; 其他的線程都叫子線程
2.線程模塊
1)current_thread函數(shù) - 獲取當前線程
- Thread類
Thread類的對象就是線程喇伯,所以需要子線程就創(chuàng)建這個類的對象
Thread(target,args,kwargs)
target - 函數(shù), 需要在當前創(chuàng)建的子線程中去調用的函數(shù)
args/kwargs - 調用target中的函數(shù)需要的實參列表
通過start方法,在子線程中去調用target對應的函數(shù)
1.創(chuàng)建自己的線程類
1)聲明一個類繼承Thread
2)實現(xiàn)run方法,這個方法中的任務就是需要在子線程中執(zhí)行的任務
注意: 一個進程中如果有多個線程私股,程序會在所有的線程都結束的時候才結束;
發(fā)生異常崩潰其實奔潰的是線程
3)用子類直接創(chuàng)建線程對象
4)通過start去執(zhí)行子線程中的任務
1.join
如果希望某個任務是在某個線程結束后才執(zhí)行议街,那就將這個任務的對象放在對應線程對象調用join方法的后面
1.問題
當多個線程同時對一個數(shù)據(jù)進行讀寫操作,可能會出現(xiàn)一個線程剛把數(shù)據(jù)讀出來還沒來得及寫進去奶躯,另外一個線程進行讀操作的數(shù)據(jù)安全問題帚桩。
(多個人上一個廁所,一個人進去了還沒出來嘹黔,另外一個人又進去的問題)
2.解決 - 加鎖
1)保證每個數(shù)據(jù)對應一個鎖對象
2)操作數(shù)據(jù)前加鎖账嚎,數(shù)據(jù)操作完成后釋放鎖