python版本的读写锁操作方法


Posted in Python onApril 25, 2016

本文实例讲述了python版本的读写锁操作方法。分享给大家供大家参考,具体如下:

最近要用到读写锁的机制,但是python2.7的自带库里居然木有.
网上讲读写锁的例子众多,但是原理简单,代码明晰的却不多见, 索性自己写个.

读写锁一般用于多个读者,1个或多个写者同时访问某种资源的时候。多个读者之间是可以共享资源的,但是写者与读者之间,写者与写者之间是资源互斥的。

这也就是说同时可以有多个读者或一个写者处于工作状态。

细分下来,读写锁可以分为三类,读者优先,写者优先和公开策略。

第一种,读者优先,
目的是保证读者可以尽可能的不需要等待就获取资源。
实现的要点,写者方面比较简单,只需要一个锁就能控制是否可写。
读者方面,在第一个读者到来的时候就要阻止写者,最后一个读者离开之后再开放写者。这里就存在一个读者计数器的问题,这个计数器是需要在各读者之间共享的,所以需要一个额外的锁来确保该计数器的加减操作的原子性。

实现代码:

定义一个类RWLock,并作简单的初始化

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()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
为python设置socket代理的方法
Jan 14 Python
介绍Python中的fabs()方法的使用
May 14 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
Python简单实现enum功能的方法
Apr 25 #Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 #Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 #Python
Python 中的 else详解
Apr 23 #Python
Python 探针的实现原理
Apr 23 #Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 #Python
Linux 发邮件磁盘空间监控(python)
Apr 23 #Python
You might like
php写的AES加密解密类分享
2014/06/20 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
菊花转动的jquery加载动画效果
2018/08/19 jQuery
vue项目中使用Svg的方法
2018/10/24 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python中获取对象信息的方法
2015/04/27 Python
对python中各个response的使用说明
2020/03/28 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
岳父生日宴会答谢词
2014/01/13 职场文书
幼儿评语大全
2014/04/30 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
英语邀请函范文
2015/02/02 职场文书
技术负责人岗位职责
2015/02/10 职场文书
2016年社区文体活动总结
2016/04/06 职场文书