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操作数组上的字符串   java JAXB内容未实例化   图形在Java中如何绘制垂直居中的字符串?   java Apache Ant:使用Junit时出现NoClassDefFoundError   java无法从服务器上运行perl脚本   如何在java中沿树进行预排序遍历,并打印0和1以对应每个节点上的特定字符?   java如何创建。p12文件?   java线程访问无效   java只匹配命名空间中的XML节点,而不知道NS前缀   从java获取2d arraylist元素   数组Java动态集合对象   java Xpath通过通配符或布尔运算查找以相同名称开头的节点?   java注释元素类型   java在中看不到Super()。反编译后的类文件