python3多線程可以不加鎖,每個多線程就自帶鎖
python2多線程必須加鎖,多線程本身不帶鎖
加鎖有兩種方式,一種如下圖:
import time, threading count=0 #聲明全局變量 lock=threading.Lock() #申請一把鎖 def lajifenlei(): global count #引用全局變量 lock.acquire() #加鎖 count+=1 lock.release() #釋放鎖 time.sleep(1) print(count) for i in range(10): th = threading.Thread(target=lajifenlei,) #聲明線程數 th.start() #啟動線程 while threading.activeCount()!=1: pass C:\Users\zhaow\AppData\Local\Programs\Python\Python37\python.exe D:/study/python/atp/lib/t.py 10 1010 101010 10 10 1010
另一種類似打開和關閉文件的with方法,自動開關鎖
import time, threading count=0 #聲明全局變量 lock=threading.Lock() #申請一把鎖 def lajifenlei(): global count #引用全局變量 with lock: #with模塊自動加鎖及解鎖 count+=1 time.sleep(1) print(count) for i in range(10): th = threading.Thread(target=lajifenlei,) #聲明線程數 th.start() #啟動線程 while threading.activeCount()!=1: pass