python版本的讀寫鎖操作方法
本文實(shí)例講述了python版本的讀寫鎖操作方法。分享給大家供大家參考,具體如下:
最近要用到讀寫鎖的機(jī)制,但是python2.7的自帶庫(kù)里居然木有.
網(wǎng)上講讀寫鎖的例子眾多,但是原理簡(jiǎn)單,代碼明晰的卻不多見, 索性自己寫個(gè).
讀寫鎖一般用于多個(gè)讀者,1個(gè)或多個(gè)寫者同時(shí)訪問(wèn)某種資源的時(shí)候。多個(gè)讀者之間是可以共享資源的,但是寫者與讀者之間,寫者與寫者之間是資源互斥的。
這也就是說(shuō)同時(shí)可以有多個(gè)讀者或一個(gè)寫者處于工作狀態(tài)。
細(xì)分下來(lái),讀寫鎖可以分為三類,讀者優(yōu)先,寫者優(yōu)先和公開策略。
第一種,讀者優(yōu)先,
目的是保證讀者可以盡可能的不需要等待就獲取資源。
實(shí)現(xiàn)的要點(diǎn),寫者方面比較簡(jiǎn)單,只需要一個(gè)鎖就能控制是否可寫。
讀者方面,在第一個(gè)讀者到來(lái)的時(shí)候就要阻止寫者,最后一個(gè)讀者離開之后再開放寫者。這里就存在一個(gè)讀者計(jì)數(shù)器的問(wèn)題,這個(gè)計(jì)數(shù)器是需要在各讀者之間共享的,所以需要一個(gè)額外的鎖來(lái)確保該計(jì)數(shù)器的加減操作的原子性。
實(shí)現(xiàn)代碼:
定義一個(gè)類RWLock,并作簡(jiǎn)單的初始化
import threading
class RWLock(object):
def __init__(self):
self.rlock = threading.Lock()
self.wlock = threading.Lock()
self.reader = 0
寫者鎖
def write_acquire(self): self.wlock.acquire() def write_release(self): self.wlock.release()
讀者鎖
def read_acquire(self):
self.rlock.acquire()
self.reader += 1
if self.reader == 1:
self.wlock.aquire()
self.rlock.release()
def read_release(self):
self.rlock.acquire()
self.reader -= 1
if self.reader == 0:
self.wlock.release()
self.rlock.release()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
tensorflow基本操作小白快速構(gòu)建線性回歸和分類模型
這篇文章主要介紹了tensorflow基本操作,快速構(gòu)建線性回歸和分類模型,圖文代碼示例非常詳細(xì),有需要的朋友可以借鑒參考下,希望可以對(duì)大家有所幫助2021-08-08
Python使用random模塊實(shí)現(xiàn)擲骰子游戲的示例代碼
這篇文章主要介紹了Python使用random模塊實(shí)現(xiàn)擲骰子游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Django 設(shè)置admin后臺(tái)表和App(應(yīng)用)為中文名的操作方法
這篇文章主要介紹了Django 設(shè)置admin后臺(tái)表和App(應(yīng)用)為中文名的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Python基于os.environ從windows獲取環(huán)境變量
這篇文章主要介紹了Python基于os.environ從windows獲取環(huán)境變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix)
下面小編就為大家分享一篇淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python趣味挑戰(zhàn)之用pygame實(shí)現(xiàn)簡(jiǎn)單的金幣旋轉(zhuǎn)效果
今天教大家怎么用pygame實(shí)現(xiàn)簡(jiǎn)單的金幣旋轉(zhuǎn)效果,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
運(yùn)行python提示no module named sklearn的解決方法
這篇文章主要介紹了運(yùn)行python提示no module named sklearn的解決方法,需要的朋友可以參考下2020-11-11
Python turtle畫圖庫(kù)&&畫姓名實(shí)例
今天小編就為大家分享一篇Python turtle畫圖庫(kù)&&畫姓名實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
PyCharm安裝庫(kù)numpy失敗問(wèn)題的詳細(xì)解決方法
今天使用pycharm編譯python程序時(shí),由于要調(diào)用numpy包,但又未曾安裝numpy,于是就根據(jù)pycharm的提示進(jìn)行安裝,最后竟然提示出錯(cuò),下面這篇文章主要給大家介紹了關(guān)于PyCharm安裝庫(kù)numpy失敗問(wèn)題的詳細(xì)解決方法,需要的朋友可以參考下2022-06-06

