为了账号安全,请及时绑定邮箱和手机立即绑定

redis 锁定:redispy 与 python-redis-lock

redis 锁定:redispy 与 python-redis-lock

拉莫斯之舞 2021-06-04 14:09:30
除了 python-redis-lock 模块为锁对象提供上下文管理器 - 与您从 redispy 模块获得的锁对象相比,有什么区别?python-redis-lock 有什么特别之处?rc = Redis.from_url(settings.BROKER_URL) lock_str = "bld-%s-lock" % bld_id使用重新分配:lock = rc.lock(lock_str)使用 python-redis-lock:lock = redis_lock.Lock(rc, lock_str)
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我认为上下文管理器不是这里的主要区别,因为如果您看到 redis-py Lock 的代码,它们会在__enter__其中__exit__添加和。

两个 Lock 似乎都使用 SETNX 来获取锁:

我在那里看到的主要区别是阻塞线程的工作方式。

  • python-redis-lock 的情况下,他们一直使用BLPOP机制来阻塞线程,在我看来,这似乎是使用 redis 自己版本的阻塞机制。Github 代码

就像是:

timed_out = not self._client.blpop(self._signal, blpop_timeout) and  timeout

  • redis-py 的情况下,他们似乎使用time 模块及其sleep方法来阻塞线程以检查阻塞是否超时。

就像是:

import time as mod_time


...

stop_trying_at = mod_time.time() + blocking_timeout

...

mod_time.sleep(sleep)


查看完整回答
反对 回复 2021-06-16
  • 1 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信