jenkins-bot merged this change.
throttle.py: use different locks for read/write actions
Use different locks for read and write actions
An async save (write actions via _putthread) would not block read
actions in Main thread.
Bug: T135992
Change-Id: Ic73f0e5556f8533c136b64e6d23f02ee6f2dfad7
---
M pywikibot/throttle.py
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/pywikibot/throttle.py b/pywikibot/throttle.py
index e6236ff..ef0367e 100644
--- a/pywikibot/throttle.py
+++ b/pywikibot/throttle.py
@@ -41,6 +41,8 @@
multiplydelay=True):
"""Initializer."""
self.lock = threading.RLock()
+ self.lock_write = threading.RLock()
+ self.lock_read = threading.RLock()
self.mysite = str(site)
self.ctrlfilename = config.datafilepath('throttle.ctrl')
self.mindelay = mindelay
@@ -260,7 +262,8 @@
thread from writing to the same site until the wait expires.
"""
- with self.lock:
+ lock = self.lock_write if write else self.lock_read
+ with lock:
wait = self.waittime(write=write)
# Calculate the multiplicity of the next delay based on how
# big the request is that is being posted now.
To view, visit change 437145. To unsubscribe, visit settings.