从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 JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储