Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
redis锁:redispy与python redis锁_Python_Redis_Redis Py - Fatal编程技术网

redis锁: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

除了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_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集成。