Python——Lock(鎖)
阿新 • • 發佈:2022-04-12
鎖是為了可能出現的資料不同步或資料不對稱問題的解決方法,如果需要大量的使用者訪問相同資料時,為了資料的一致性和安全。那麼就需要加鎖。
概念:
鎖相當於是將使用者訪問需求進行佇列化,即第一個使用者訪問時,後續使用者無法進行相同資料的訪問。直到第一個使用者訪問完成後,由佇列中的第二個使用者繼續訪問。
互斥鎖
特點:
1. 兩種表現形式,with和acquire,release
2. 在用一個執行緒中,不能連續acquire多次(程序會卡在這),必須要進行release後才能繼續acquire(會報錯,RuntimeError: release unlocked lock)
3. 在操作全域性變數和+=,-=,*=,/=這類計算在賦值類,或lis[0]+=1,dic['key']-=1這類時,就會出現資料不一致的問題。
from threading import Thread,Lock a = 1 def func1(lock): with lock: for i in range(100000): global a a -= 1 def func2(lock): with lock: for i in range(100000): global a a += 1 lock = Lock() t1 = Thread(target=func1,args=(lock,)) t2 = Thread(target=func2,args=(lock,)) t1.start() t2.start() t1.join() t2.join() print(a)
from Threading import Lock lock = Lock() lock.acquire() print(1) lock.acquire() print(2) ''' 1 '''