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实例分享:快速查找出被挂马的文件
Jun 08 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
python http基本验证方法
Dec 26 Python
Django中间件基础用法详解
Jul 18 Python
Django中的cookie和session
Aug 27 Python
使用python动态生成波形曲线的实现
Dec 04 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
pytorch查看模型weight与grad方式
Jun 24 Python
pycharm 2020 1.1的安装流程
Sep 29 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的错误信息
2006/10/09 PHP
一个odbc连mssql分页的类
2006/10/09 PHP
Banner程序
2006/10/09 PHP
PHP 文件上传全攻略
2010/04/28 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
Python内置函数的用法实例教程
2014/09/08 Python
Python操作MySQL简单实现方法
2015/01/26 Python
ipython和python区别详解
2019/06/26 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
Linux上比较文件的命令都有哪些
2013/09/28 面试题
综合测评自我鉴定
2013/10/08 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
军训通讯稿范文
2015/07/18 职场文书
2016国培学习心得体会
2016/01/08 职场文书
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
MSSQL基本语法操作
2022/04/11 SQL Server
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL