异步读写锁。

aiorwlock的Python项目详细描述


https://travis-ci.com/aio-libs/aiorwlock.svg?branch=masterhttps://coveralls.io/repos/jettify/aiorwlock/badge.png?branch=masterChat on Gitter

asyncio的读写锁。RWLock维护一对关联的 锁,一个用于只读操作,一个用于写入。读锁可能是 由多个读卡器任务同时进行,只要 没有作家。写锁是独占的。

读写锁是否比使用 互斥锁取决于数据的读取频率read 相比于被修改的。例如,最初 用数据填充,之后很少修改,同时 频繁搜索是使用读写锁的理想选择。 但是,如果更新变得频繁,那么数据将花费大部分时间 被独占地锁定,即使并发性增加也很少。

实现几乎是这个patch的直接端口。

使用异步定义的示例

需要python 3.5+

importasyncioimportaiorwlockloop=asyncio.get_event_loop()asyncdefgo():rwlock=aiorwlock.RWLock(loop=loop)asyncwithrwlock.writer:# or same way you can acquire reader lock# async with rwlock.reader: passprint("inside writer")awaitasyncio.sleep(0.1,loop=loop)loop.run_until_complete(go())

快速路径

默认情况下,在获取锁时切换上下文。这样就可以 其他等待任务获得锁,即使持有锁的任务 不包含上下文开关(await fut语句)。

默认行为可以通过fast参数关闭: rwlock(fast=true)

长话短说:锁在默认情况下是安全的,但如果你确定 上下文切换(等待异步,异步 语句)在锁定的代码中,您可能要使用 轻微加速。

许可证

aiorwlock是在apache 2许可下提供的。

更改

0.6.0(2018-12-18)

  • 作家释放锁60后唤醒所有读者(谢谢@ranyixu)
  • 修正了python 3.7的兼容性
  • 从语法中删除了旧的yield
  • 支持的最低版本是Python3.5.3
  • 删除了对非异步上下文管理器的支持

0.5.0(2017-12-03)

  • 在将lock从write升级到 阅读39
  • 使用loop.create_future代替asyncio.future如果可能的话

0.4.0(2015-09-20)

  • 支持python 3.5和用语句异步
  • 重命名.reader\u lock->;.reader.writer\u lock->; .writer。保留向后兼容性。

0.3.0(2014-02-11)

  • 添加。已锁定属性

0.2.0(2014-02-09)

  • 使.release()成为非协同程序

0.1.0(2014-12-22)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java exoplayer启用视频字幕   java在读取RSS源时“1字节UTF8序列的1字节无效”   在Array Android Java中维护最新的5个用户?   swing命令在Java actionperformed中运行了两次   使用java将数据从cassandra迁移到多个文件   java connect MySQL数据库与playframework 2.5   java无法在片段中的SimpleAdapter中创建getView   java有线scala类型设计   java谷歌云消息开发者安卓代码崩溃   java使用@NoRepositoryBean运行Spring集成测试,没有@Repository实现   java在使用抽象类时为@RequestBody指定类型   java如何返回数组的和,并使用以下代码启动它?   java DecryptoJS中不返回所需数据的解密   java如何解析xml并选择要发送的项目   Eclipse中的java Google Web工具包   java获取两个文本的相似度百分比