除了python-redis-lock模块为锁对象提供了contextmanager -与从redispy模块获得的锁对象相比,有什么区别? python-redis-lock有什么特别之处?
rc = Redis.from_url(settings.BROKER_URL)
lock_str = "bld-%s-lock" % bld_id
使用redispy:
lock = rc.lock(lock_str)
使用python-redis-lock:
lock = redis_lock.Lock(rc, lock_str)
答案 0 :(得分:3)
我认为上下文管理器不是这里的主要区别,因为如果您看到redis-py Lock的代码,则在其中添加了__enter__
和__exit__
。
两个锁似乎都使用SETNX来获取锁:
我看到的主要区别是阻塞线程的工作方式。
类似的东西:
timed_out = not self._client.blpop(self._signal, blpop_timeout) and timeout
类似的东西:
import time as mod_time ... stop_trying_at = mod_time.time() + blocking_timeout ... mod_time.sleep(sleep)