summaryrefslogtreecommitdiff
path: root/redis/lock.py
Commit message (Collapse)AuthorAgeFilesLines
* Added black and isort (#1734)Anas2021-11-301-29/+26
|
* Improve documentation about Lock (#1701)Jeremy Mayeres2021-11-141-4/+4
|
* Remove blocking behaviour from context manager __enter__alxasfuck2021-05-121-3/+1
|
* 🕰️ Use monotonic clock in Lock (and tests)Jack Edge2020-10-121-2/+2
| | | | | | | | | | | | | | | | | During a call to `acquire()`, if the call is `blocking` and has a `blocking_timeout` set, it uses `time.time()` calls to determine when to give up attempting to acquire the lock. However, since `time.time()` is marked as "adjustable", it is possible for it to go backwards or forwards at a rate other than 1 second per second, meaning the spinloop may exit earlier or later than expected. By changing the implementation to use `time.monotonic()`, which is guaranteed to never go backwards, and not be affected by system clock updates, this potential problem is fixed. For the same reason, some time dependent lock tests have also been changed to use `time.monotonic()`.
* Remove support for end-of-life Python 2.7 (#1318)Jon Dufresne2020-08-061-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove support for end-of-life Python 2.7 Python 2.7 is end of life. It is no longer receiving bug fixes, including for security issues. Python 2.7 went EOL on 2020-01-01. For additional details on support Python versions, see: Supported: https://devguide.python.org/#status-of-python-branches EOL: https://devguide.python.org/devcycle/#end-of-life-branches Removing support for EOL Pythons will reduce testing and maintenance resources while allowing the library to move towards a modern Python 3 style. Python 2.7 users can continue to use the previous version of redis-py. Was able to simplify the code: - Removed redis._compat module - Removed __future__ imports - Removed object from class definition (all classes are new style) - Removed long (Python 3 unified numeric types) - Removed deprecated __nonzero__ method - Use simpler Python 3 super() syntax - Use unified OSError exception - Use yield from syntax Co-authored-by: Andy McCurdy <andy@andymccurdy.com>
* Lock.extend() can now replace the lock's existing TTL with a new valuelaixintao2020-03-241-14/+34
| | | | | | | Lock.extend() now has a new option, `replace_ttl`. When False (the default), Lock.extend() adds the `additional_time` to the lock's existing TTL. When replace_ttl=True, the lock's existing TTL is replaced with the value of `additional_time`.
* Optimize sleeping while blocking for a lockColas Le Guernic2020-02-241-3/+2
| | | | | | | | | When waiting to acquire a lock, the Lock object will sleep until the lock is acquired or until blocking_timeout has elapsed. This optimization calculates whether the next iteration will occur after blocking_timeout has elapsed and short circuits it immediately. Fixes #1263
* Lock objects now support specifying token values and ownership checkingAndy McCurdy2019-01-021-2/+24
| | | | | | | | Lock.acquire() can now be provided a token. If provided, this value will be used as the value stored in Redis to hold the lock. Lock.owned() returns a boolean indicating whether the lock is owned by the current instance.
* Add `.reacquire()` method to LockIhor Kalnytskyi2018-12-281-0/+36
| | | | | | | | | | | | `Lock` class provides a method called `.extend()` to manage a TTL of the acquired lock. However, the method allows only to extend a timeout of existing lock by N seconds, there's no way you can reset a TTL to the timeout value you passed to this lock. There could be multiple use cases for such behaviour. For instance, one may want to use a lock to implement active/passive behaviour where only one process owns a lock and resets its TTL all over again until it dies. This commit adds a new method called `.reacquire()` to reset a TTL of the acquired lock back to the passed timeout value.
* rename new LockErrorNotOwned to LockNotOwnedErrorAndy McCurdy2018-12-031-3/+3
|
* Extend lock error for not owned special caseJoshua Harlow2018-12-031-3/+5
| | | | | | | | Using the locking routines, it is useful to be able to distingush a generic lock error from a one that is related to the lock not being owned anymore (without doing string checks); this allows say a lock extension thread to attempt to re-acquire the lock in this case (vs just dying).
* Update .locked() to indicate if lock has been acquired by any procesesAndy McCurdy2018-11-151-2/+4
| | | | | | This make just like threading.Lock objects do. Fixed #1007
* add locked() method to lock objectAndy McCurdy2018-11-141-0/+4
| | | | | | | Lock.locked() returns a boolean indicating if the lock is acquired and valid. Thanks Alan Justino da Silva Fixes #1007
* raise a LockError when the context manager fails to acquire a lockv3-breaking-changesAndy McCurdy2018-11-141-2/+3
| | | | | Fixes #621 Fixes #927
* only support LuaLock going forwardAndy McCurdy2018-11-141-92/+50
| | | | | | | | | | Everyone is using Redis 2.6 or greater, right? The Lua lock implementation is so much nicer and less buggy. Fixes #1031 Fixes #902 Fixes #793 Fixes #610
* Use unicode literals throughout projectJon Dufresne2018-11-031-2/+1
| | | | Remove workaround for handling unicode with older Pythons.
* "while 1" --> "while True"Jeff Widman2018-10-111-1/+1
| | | | This is python, not C
* Removing do_acquire from lualock as there is no gain over default do_acquireRobert Kopaczewski2014-12-111-24/+0
|
* Fix lua lockingRobert Kopaczewski2014-12-101-8/+4
|
* Atomic redis.set when acquiring a lockRobert Kopaczewski2014-12-101-9/+15
|
* Lock.acquire() to respect blocking_timeout argumentGrant Cox2014-06-191-2/+2
|
* more info on thread local storageAndy McCurdy2014-06-161-4/+25
|
* restore default Lock token storage, add toggle to make it thread-localwil paredes2014-06-061-2/+9
| | | | | * add thread_local=False parameter to Lock.__init__() and StrictRedis.lock() * use thread_local to decide whether to put token in thread-local storage
* move Lock.token attribute into thread-local storagewil paredes2014-06-051-8/+10
|
* Lock.release(): reorder code to avoid token overwritewil paredes2014-06-051-9/+7
| | | | | | * assignment to self.token was not protected by the lock, so the value could get overwritten * do_release() now has an expected_token parameter that receives the old token value * NOTE: this only fixes the issue for locks that do not have timeouts
* add a lock implementation using Lua scripts.Andy McCurdy2014-06-011-8/+94
|
* updated Lock class:Andy McCurdy2014-06-011-0/+158
* now uses unique string tokens to claim lock ownership * added extend() method to extend the timeout on an already acquired lock