从awslab模拟基于java的dynamodbclient的Python库

python-dynamodb-lock-whatnick的Python项目详细描述


Python DynamoDB锁

https://img.shields.io/pypi/v/python_dynamodb_lock.svghttps://img.shields.io/travis/whatnick/python_dynamodb_lock.svgDocumentation Status

这是目前未维护(2年)的Python DynamoDB Lock的一个分支 项目。本着开源的精神,whatnick在一定时间内保持这一点。 任何针对这个项目的增强都可以发送到这里。在

这是一个建立在DynamoDB之上的通用分布式锁库。它是沉重的 “灵感”来自基于java的AmazonDynamoDBLockClient 库,并支持粗粒度和细粒度锁定。在

特点

  • 获取命名锁-具有可配置的重试语义
  • 定期检测/更新锁以使其保持活动状态
  • 如果在可配置的租约期限内没有心跳信号,则自动释放锁
  • 如果锁被盗或离租约到期太近,则通知应用回调函数
  • 存储任意应用程序数据以及锁
  • 使用单调递增时钟,以避免由于时钟偏移和/或DST等引起的问题
  • 在可配置的过期期后自动删除数据库条目

一致性注释

请注意,虽然锁本身可以提供相当强的一致性保证,但它没有 参与任何分配的事务。在

例如,您可能希望为某个客户id“xyz”获取一个锁,然后进行一些更改 ,然后释放锁-从而 保证一次只有一个进程更改任何给定的客户id。在

虽然幸福之路看起来还不错,但考虑一下应用程序更改需要很长时间的情况, 一些错误/gc暂停会阻止heartbeat更新锁。然后,另一个客户 可以假设该锁被放弃,并开始并行处理同一个客户。原来的 锁客户端将识别出它的锁已被“偷走”,并将通过回调通知应用程序 事件,但应用程序可能已将其更改提交到数据库。这只能通过 将应用程序更改和锁释放作为单个分布式事务的一部分, 如前所述,不支持。在

也就是说,在大多数情况下,心跳预期不会延迟到锁的租约之后 持续时间,实现应该可以正常工作。在

请参考Martin Kleppmann关于此主题的一篇优秀文章: https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

历史

0.9.3(2020年7月14日)

  • 通过CI从whatnick分叉释放

0.9.2(2020-07-13)

  • 从whatnick手册分叉释放

0.9.1(2019-10-29)

  • 主存储库第二版

0.9.0(2018-10-28)

  • PyPI的第一个版本。在

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

推荐PyPI第三方库


热门话题
java为什么stripVersion不能在带有mojo依赖项的mavendependencyplugin上工作   java存储具有不同功能的大量对象   java Spring MockMvc自定义验证器未在Spring容器中注册/调用   javascript程序编辑实体而不是添加   C++如何在java上检索图形卡信息?   java如何在没有方法参数的方法上使用@cacheable注释的键   java如何获取特定用户或学生的JSON   java可序列化AjaxRequestTarget   java Tomcat 8禁用分块编码过滤器   java这个简单的Swingbase类是线程安全的吗?   java调用Gdi32。使用JNA获取对象   如何使用来自其他类Java Android onClick的方法?   json序列化已经有了id(java.lang.String)的POJO   java使用jsp上传多个文件?   java有没有办法为Android项目在EclipseIndigo上设置JVM参数?   Eclipse中的java,为什么它告诉我添加一个已经存在的分号?   Java中的正则表达式拆分行   Java:在单行中赋值