redis锁:redispy与python redis锁
除了PythonRedisLock模块为锁对象提供contextmanager之外,与从redispy模块获得的锁对象相比,有什么不同?python redis锁有什么特别之处redis锁:redispy与python redis锁,python,redis,redis-py,Python,Redis,Redis Py,除了PythonRedisLock模块为锁对象提供contextmanager之外,与从redispy模块获得的锁对象相比,有什么不同?python redis锁有什么特别之处 rc = Redis.from_url(settings.BROKER_URL) lock_str = "bld-%s-lock" % bld_id 使用redispy: lock = rc.lock(lock_str) 使用python redis锁: lock = redis_lock.Lock(rc, lock
rc = Redis.from_url(settings.BROKER_URL)
lock_str = "bld-%s-lock" % bld_id
使用redispy:
lock = rc.lock(lock_str)
使用python redis锁:
lock = redis_lock.Lock(rc, lock_str)
我认为上下文管理器并不是这里的主要区别,因为如果你看到redis py的代码,他们在那里添加了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
两个锁似乎都使用SETNX获取锁:
- python redis锁:
- redis py锁:
我在那里看到的主要区别是阻塞线程的工作方式
- 对于python redis lock来说,他们一直在使用机制来阻止线程,在我看来,这就像使用redis自己版本的阻止机制一样李>
比如:
import time as mod_time
...
stop_trying_at = mod_time.time() + blocking_timeout
...
mod_time.sleep(sleep)
timed\u out=not self.\u client.blpop(self.\u信号,blpop\u超时)和
超时
- 在redis py的情况下,他们似乎使用及其方法来阻塞线程,以检查阻塞是否有timedout
比如:
import time as mod_time
...
stop_trying_at = mod_time.time() + blocking_timeout
...
mod_time.sleep(sleep)
在我看来差别不大,您可以坚持使用redispy
redispy.Lock
在管道和Lua中实现(release
),具有线程支持,python Redislock
仅在Lua中实现,但已与Django集成。