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 11 Python
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
Python中的ConfigParser模块使用详解
May 04 Python
python中import学习备忘笔记
Jan 24 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
python变量的作用域是什么
May 26 Python
pytorch常用数据类型所占字节数对照表一览
May 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 魔术函数使用说明
2010/05/14 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
javascript事件模型代码
2007/07/01 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python使用opencv进行人脸识别
2017/04/07 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
基于Django实现日志记录报错信息
2019/12/17 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
小学运动会口号
2014/06/07 职场文书
英文感谢信范文
2015/01/21 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
工作年限证明范本
2015/06/15 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS