redis 锁定:redispy 与 python-redis-lock

除了 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)


拉莫斯之舞
浏览 237回答 1
1回答

喵喵时光机

我认为上下文管理器不是这里的主要区别,因为如果您看到 redis-py Lock 的代码,它们会在__enter__其中__exit__添加和。两个 Lock 似乎都使用 SETNX 来获取锁:python-redis-lock: Githubredis-py 锁:Github我在那里看到的主要区别是阻塞线程的工作方式。在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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python