代码之家  ›  专栏  ›  技术社区  ›  Murali Mopuru

redis locking:redispy与python redis lock之比较

  •  6
  • Murali Mopuru  · 技术社区  · 6 年前

    除了python redis lock模块为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)
    

    lock = redis_lock.Lock(rc, lock_str)
    
    1 回复  |  直到 6 年前
        1
  •  8
  •   Nagaraj Tantri    6 年前

    我认为上下文管理器不是这里的主要区别,因为如果您看到redis py的代码 Lock 他们有 __enter__ __exit__ 加进去了。

    两个锁似乎都使用SETNX获取锁:

    • 万一 python redis锁 他们一直在使用 BLPOP 机制来阻止线程,在我看来,这就像使用redis自己版本的阻塞机制。 Github code

    timed_out = not self._client.blpop(self._signal, blpop_timeout) and timeout

    • 万一 redis py公司 它们似乎很有用 time module sleep 方法阻塞线程以检查阻塞是否有timedout。

    比如:

    import time as mod_time
    
    ...
    stop_trying_at = mod_time.time() + blocking_timeout
    ...
    mod_time.sleep(sleep)