基于python mongodb的分布式锁

mongolock的Python项目详细描述


#用法

from mongolock import mongolock


超时=10):
这里有些工作

或者只通过调用方法:
if lock.lock('key','my戥worker戥name'):
尝试:
一些有用的工作
最后:
lock.release('key','my戥worker戥name')

'my_worker_name',expire=60,timeout=10):
*` timeout`(可选)-等待锁的时间(秒)

client=mongoclient('localhost:27017')
lock=mongolock(client=client)

首选第二个,这样,您就可以执行更细粒度的配置:

*使用mongoreplicasetclient
*指定写入关注点
*指定标记
*等

需要考虑的重要事项

如果不这样做-可能会发生一些奇怪的事情。
请考虑以下顺序:

*worker1和worker2具有相同的名称:worker
*worker1在expire+30s时实现锁定
*worker2在30s后尝试获取锁定(worker1仍在工作)
*Worker2窃取它,现在Worker1结束工作并释放锁,因为它们有相同的名称-锁被释放,Worker3接受锁,而Worker2仍在工作…

将机器之间的时间漂移也作为任务关键部分的持续时间来考虑。

*machine1和machine2有时间漂移5s
*machine1上的工人锁定任务a
*machine1上的工人在1s内完成任务a
*现在machine2上的工人开始工作了
*它不知道machine1上的工人已经完成了task a
*需要锁定taska(没有问题,因为锁在4s前已经释放)并执行此操作

为了防止出现这种奇怪的情况,您可以简单地将部分时间(例如ymdhm)添加到具有任务名称的密钥中。

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

推荐PyPI第三方库


热门话题
java如何保护嵌入在pdf中的隐写图像   java vert。x getting无法创建子事件循环   maven编译上不存在java包   Spring规范的谓词应该是静态的吗?   java测试使用其他测试的内部ContextConfiguration   java所有变量名中都应该包含度量单位吗?   java运行此代码后,我得到一个空白的sql文件:(   java如何添加到其他地方已经创建的哈希映射?   java JavaFX如何在网格窗格中垂直对齐HBox中的复选框   用于格式化XML/XSLT的java Eclipse插件   java Android:使用JDBC?   将Web服务导出到其他环境后出现java运行时错误   java如何从当前登录的用户获取数据   java使用Dozer将一种类型的列表转换为另一种类型的数组   带有简单差异的java Javers返回实体\实例\带有抽象实体的\空\ ID   javajavax。坚持不懈键入查询。getSingleResult()NoResultException,即使记录存在   java如何传递图形g   java在Android中使用Smack API进行即时消息传递