Python中threading模塊的Lock和RLock區(qū)別詳解
1.解釋
1.1 Lock:
Lock鎖是Python的原始鎖,在鎖定時不屬于任何一個線程。在調(diào)用了 lock.acquire() 方法后,進入鎖定狀態(tài),lock.release()方法可以解鎖。
底層是通過一個函數(shù)來實現(xiàn)的,會根據(jù)不同的操作系統(tǒng)選擇一個最有效的版本實例
1.2 RLock:
RLock被稱為重入鎖,RLock鎖是一個可以被同一個線程多次 acquire 的鎖,但是最后必須由獲取它的線程來釋放它,不論同一個線程調(diào)用了多少次的acquire,最后它都必須調(diào)用相同次數(shù)的 release 才能完全釋放鎖,這個時候其他的線程才能獲取這個鎖。
acquire()/release() 對可以嵌套,重入鎖必須由獲取它的線程釋放。一旦線程獲得了重入鎖,同一個線程再次獲取它將不阻塞。
RLock內(nèi)部的鎖的實現(xiàn)和Lock用的是同一個函數(shù)。
鎖 | 是否同一線程 | 是否可重復(fù)加鎖 |
Lock | 否 | 否 |
RLock | 是 | 是 |
2.示例
Lock在鎖定時不屬于特定線程,也就是說,Lock可以在一個線程中上鎖,在另一個線程中解鎖。
而對于RLock來說,只有當前線程才能釋放本線程上的鎖,即 解鈴還須系鈴人 :
import threading import time lock = threading.Lock() lock.acquire() def func(): lock.release() print("lock is released") t = threading.Thread(target=func) t.start()
輸出結(jié)果為:
lock is released
上面代碼中,在主線程中創(chuàng)建鎖,并上鎖,但是是在t線程中釋放鎖,結(jié)果正常輸出,說明一個線程上的鎖,可以由另外線程解鎖。如果把上面的鎖改為RLock則報錯。
RLock允許在同一線程中被多次acquire。而Lock卻不允許這種情況。也就是說,下面的情況對于RLock是允許的:
import threading rlock = threading.RLock() def func(): if rlock.acquire(): # 第一把鎖 print("first lock") if rlock.acquire(): # 第一把鎖沒解開的情況下接著上第二把鎖 print("second lock") rlock.release() # 解開第二把鎖 rlock.release() # 解開第一把鎖 t = threading.Thread(target=func) t.start()
輸出結(jié)果
first lock
second lock
到此這篇關(guān)于Python中threading模塊的Lock和RLock區(qū)別詳解的文章就介紹到這了,更多相關(guān)threading模塊的Lock和RLock內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python列表推導(dǎo)式入門學(xué)習(xí)解析
這篇文章主要介紹了python列表推導(dǎo)式入門學(xué)習(xí)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12YOLOv5車牌識別實戰(zhàn)教程(三)模型訓(xùn)練與評估
這篇文章主要介紹了YOLOv5車牌識別實戰(zhàn)教程(三)模型訓(xùn)練與評估,在這個教程中,我們將一步步教你如何使用YOLOv5進行車牌識別,幫助你快速掌握YOLOv5車牌識別技能,需要的朋友可以參考下2023-04-04django如何根據(jù)現(xiàn)有數(shù)據(jù)庫表生成model詳解
這篇文章主要給大家介紹了關(guān)于django如何根據(jù)現(xiàn)有數(shù)據(jù)庫表生成model的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-08-08python中如何實現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測試集的方法
這篇文章主要介紹了python中如何實現(xiàn)將數(shù)據(jù)分成訓(xùn)練集與測試集的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09