1010 from urllib2 import urlopen , Request
1111
1212import re
13+ import threading
1314import time
1415from 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