python分布式锁

pylock的Python项目详细描述


用法

from pylock import Lock

with Lock('a_key', expires=60, timeout=10):
    # do something that should only be done one at a time

配置

后端

有三个可用的后端:

打开(非锁定)后端

DEFAULT_BACKEND = {
    'class': 'pylock.backends.open_lock.OpenLock',
    'connection': 'open://'
}

警告此后端不是真正的锁,因为它总是 已获取,即使另一个实例已获取它。意思是 当您不想依赖正在运行的redis时用于测试 或者memcache实例,不关心锁的工作。

redis后端

DEFAULT_BACKEND = {
    'class': 'pylock.backends.redis_lock.RedisLock',
    'connection': 'redis://'
}

注意:方案后的所有字段都是可选的,默认为 端口6379上的本地主机,使用数据库0。

memcache后端(即将推出)

DEFAULT_TIMEOUT(默认值:60)

如果另一个客户端已经获得了锁,最多休眠一次。 在放弃之前的几秒钟。值为0表示不等待(放弃 马上)。

在实例化锁时,可以覆盖默认超时。

DEFAULT_EXPIRES(默认值:10)

我们认为任何现存的锁都超过这个数秒是无效的。 以便检测崩溃的客户端。此值必须大于 执行关键部分。

在实例化锁时,可以重写默认的expires。

KEY_PREFIX(默认值'pylock:'

这用于为生成的锁添加密钥前缀。

对于Lock('somekey'),生成的密钥将是'pylock:somekey'

灵感来源于

redis后端

redis后端几乎是ben bangert的副本 `retools.lock<;https://github.com/bbangert/retools/blob/master/retools/lock.py>;。`_ 基于Chris Lamb’s example

memcache后端(即将推出)

memcache后端的灵感来自以下几点: https://github.com/snbuback/DistributedLock- http://jbq.caraldi.com/2010/08/simple-distributed-lock-with-memcached.html - http://www.regexprn.com/2010/05/using-memcached-as-distributed-locking.html

待办事项:-更好地处理redis/memcache连接问题

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

推荐PyPI第三方库


热门话题
java在SpringMVC中如何在控制器内使用DAO?   java用Eratosthenes筛寻找素数(最初:有没有更好的方法来准备这个数组?)   Java密码检查器布尔返回值工作不正常   java如何解码百分位编码字节[]   java我正在尝试一个基于servlet的应用程序来工作   java JScrollPane破坏内容   基于bean id的java SpEL   java JavaFx TalbleView向下/向上滚动问题   apache如何使用服务器bean映射将java对象作为post参数发送   使用Avro序列化在Spark中工作时出现java Kafka foreachRDD错误