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 15 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python3.6正式版新特性预览
Dec 15 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
Dec 21 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
Python 3.8新特征之asyncio REPL
May 28 Python
NumPy中的维度Axis详解
Nov 26 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
Python内存映射文件读写方式
Apr 24 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
python中将字典形式的数据循环插入Excel
2018/01/16 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
学习张丽丽心得体会
2014/09/03 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
学生违反校规检讨书
2014/10/28 职场文书
事业单位个人总结
2015/02/12 职场文书
军训个人总结
2015/03/03 职场文书
可可西里观后感
2015/06/08 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
交通处罚决定书
2015/06/24 职场文书
大学校园招聘会感想
2015/08/10 职场文书
销售会议开幕词
2016/03/04 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang
Pygame Event事件模块的详细示例
2021/11/17 Python