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之网站的结构
Oct 24 Python
python的类方法和静态方法
Dec 13 Python
python中PIL安装简单教程
Apr 21 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
python查看模块安装位置的方法
Oct 16 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
django实现用户注册实例讲解
Oct 30 Python
python分布式计算dispy的使用详解
Dec 22 Python
使用python实现名片管理系统
Jun 18 Python
Python 忽略文件名编码的方法
Aug 01 Python
Python接口自动化测试的实现
Aug 28 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不用正则采集速度探究总结
2008/03/24 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
js中的布尔运算符使用介绍
2013/11/20 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
vue组件间通信解析
2017/03/01 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
详解a++和++a的区别
2017/08/30 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
Python环境变量设置方法
2016/08/28 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
python计算两个数的百分比方法
2018/06/29 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
初婚未育证明
2014/01/15 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
工地标语大全
2014/06/18 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
追悼会家属答谢词
2015/09/29 职场文书
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技