diff options
author | Colas Le Guernic <clslgrnc@users.noreply.github.com> | 2020-01-23 21:52:17 +0100 |
---|---|---|
committer | Andy McCurdy <andy@andymccurdy.com> | 2020-02-24 11:38:29 -0800 |
commit | 03260002ded57223c5d05b2c99a0a710ee5d34f3 (patch) | |
tree | 7782577a7df3f57eac29b047a8b90e2ce63b14dd /redis/lock.py | |
parent | fc88507aef921450dd95ada7181f1c316e01ee8b (diff) | |
download | redis-py-03260002ded57223c5d05b2c99a0a710ee5d34f3.tar.gz |
Optimize sleeping while blocking for a lock
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
Diffstat (limited to 'redis/lock.py')
-rw-r--r-- | redis/lock.py | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/redis/lock.py b/redis/lock.py index 8d481d7..2f5aa27 100644 --- a/redis/lock.py +++ b/redis/lock.py @@ -124,8 +124,6 @@ class Lock(object): self.thread_local = bool(thread_local) self.local = threading.local() if self.thread_local else dummy() self.local.token = None - if self.timeout and self.sleep > self.timeout: - raise LockError("'sleep' must be less than 'timeout'") self.register_scripts() def register_scripts(self): @@ -184,7 +182,8 @@ class Lock(object): return True if not blocking: return False - if stop_trying_at is not None and mod_time.time() > stop_trying_at: + next_try_at = mod_time.time() + sleep + if stop_trying_at is not None and next_try_at > stop_trying_at: return False mod_time.sleep(sleep) |