Skip to content

Commit ec0ffbe

Browse files
authored
Merge pull request #28 from kmaehashi/thread-safe
Make request delay thread safe
2 parents ad878b6 + 8ac01bb commit ec0ffbe

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

atwiki/core.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from urllib2 import urlopen, Request
1111

1212
import re
13+
import threading
1314
import time
1415
from collections import namedtuple
1516

@@ -26,7 +27,8 @@ def __init__(self, uri, **kwargs):
2627
self._uri = uri
2728
self._user_agent = kwargs.get('user_agent', 'Mozilla/5.0 (AtWikiPython)')
2829
self._sleep = kwargs.get('sleep', 10) # in seconds
29-
self._last_request = 0.0 # epoch second last request has made
30+
self._last_request = 0.0 # epoch second at completion of the last request
31+
self._lock = threading.Lock()
3032

3133
def get_list(self, tag=None, _start=1):
3234
index = _start
@@ -102,8 +104,10 @@ def search(self, keyword, is_and=True, wiki_syntax=False, complete=True):
102104

103105
def _request(self, url, data=None):
104106
req = Request(url, headers={'User-Agent': self._user_agent}, data=data)
105-
sleep = self._last_request + self._sleep - time.time()
106-
if 0 < sleep:
107-
time.sleep(sleep)
108-
self._last_request = time.time()
109-
return BeautifulSoup(urlopen(req).read(), 'html5lib')
107+
with self._lock:
108+
sleep = self._last_request + self._sleep - time.time()
109+
if 0 < sleep:
110+
time.sleep(sleep)
111+
content = urlopen(req).read()
112+
self._last_request = time.time()
113+
return BeautifulSoup(content, 'html5lib')

0 commit comments

Comments
 (0)