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中的闭包用法实例详解
May 05 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
Python super()方法原理详解
Mar 31 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
理解python中装饰器的作用
Jul 21 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
Javascript !!的作用
2008/12/04 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
Python修改MP3文件的方法
2015/06/15 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
英国香水店:The Perfume Shop
2017/03/27 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
餐饮主管岗位职责
2013/12/10 职场文书
赡养老人协议书
2014/04/21 职场文书
励志演讲稿600字
2014/08/21 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
公民代理授权委托书
2014/09/24 职场文书
假释思想汇报范文
2014/10/11 职场文书
个人贷款收入证明
2014/10/26 职场文书
小学中等生评语
2014/12/29 职场文书
运动会宣传语
2015/07/13 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android