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在多玩图片上下载妹子图的实现代码
Aug 13 Python
详解Python中__str__和__repr__方法的区别
Apr 17 Python
使用Python生成url短链接的方法
May 04 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
对Python中的@classmethod用法详解
Apr 21 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
详解python列表(list)的使用技巧及高级操作
Aug 15 Python
Django之PopUp的具体实现方法
Aug 31 Python
Django将默认的SQLite更换为MySQL的实现
Nov 18 Python
Python代码需要缩进吗
Jul 01 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 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
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
快速排序 php与javascript的不同之处
2011/02/22 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JS表的模拟方法
2015/02/05 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
深入探讨前端框架react
2015/12/09 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
python绘制立方体的方法
2018/07/02 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
strlen的几种不同实现方法
2013/05/31 面试题
数学教研活动总结
2014/07/02 职场文书
网吧消防安全责任书
2014/07/29 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
丧事主持词
2015/07/02 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android