Except that python-redis-lock module provides contextmanager for the lock object - what are the differences when compared to the lock object you get from redispy module? what is so special about python-redis-lock?
rc = Redis.from_url(settings.BROKER_URL)
lock_str = "bld-%s-lock" % bld_id
Using redispy:
lock = rc.lock(lock_str)
Using python-redis-lock:
lock = redis_lock.Lock(rc, lock_str)
The simplest way to use Redis to lock a resource is to create a key in an instance. The key is usually created with a limited time to live, using the Redis expires feature, so that eventually it will get released (property 2 in our list). When the client needs to release the resource, it deletes the key.
redis-py (which you import as just redis ) is one of many Python clients for Redis, but it has the distinction of being billed as “currently the way to go for Python” by the Redis developers themselves.
source code object --+ | StrictRedis. Implementation of the Redis protocol. This abstract class provides a Python interface to all Redis commands and an implementation of the Redis protocol. Connection and Pipeline derive from this, implementing how the commands are sent and received to the Redis server.
In a system, sometimes you must lock a resource. This might be to make critical modifications that cannot be resolved in any concurrent way. The goals for locks are: One worker (and only one) worked to be able to acquire rights to a resource.
I think the context manager is not the major difference here, because if you see code of redis-py Lock they have the __enter__
and __exit__
added in there.
Both the Lock's seem to use SETNX for acquiring the lock:
The major difference I saw in there was the way blocking the threads work.
Something like:
timed_out = not self._client.blpop(self._signal, blpop_timeout) and timeout
Something like:
import time as mod_time ... stop_trying_at = mod_time.time() + blocking_timeout ... mod_time.sleep(sleep)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With