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连接问题