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