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进程的信号通讯
Apr 09 Python
Python中的ConfigParser模块使用详解
May 04 Python
多版本Python共存的配置方法
May 22 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
Django时区详解
Jul 24 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
python分布式编程实现过程解析
Nov 08 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
Python 在局部变量域中执行代码
Aug 07 Python
Python urlopen()参数代码示例解析
Dec 10 Python
用基于python的appium爬取b站直播消费记录
Apr 17 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 基本语法格式
2009/12/15 PHP
PHP array_push 数组函数
2009/12/26 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
jQuery 创建Dom元素
2010/05/07 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
Python+MongoDB自增键值的简单实现
2016/11/04 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
校三好学生主要事迹
2014/01/11 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
小班开学寄语
2014/04/04 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
网络舆情信息简报
2015/07/21 职场文书
公司备用金管理制度
2015/08/04 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android