python - Grequests with exponential backoff -
the following pattern have doing simultaneous requests:
rs = (grequests.get(url) url in urls) res_items = grequests.map(rs) num, res in enumerate(res_items): json_data = json.loads(res.text)
however, crashes error connectionerror: httpconnectionpool(host='apicache.vudu.com', port=80): max retries exceeded url:
every 5,000 requests. more reliable patter doing above -- example, retrying url 5 times if individual request doesn't work?
here 1 option, using exponential backoff described here:
def grequester(self, url, n=1): ''' google exponential backoff: https://developers.google.com/drive/web/handle-errors?hl=pt-pt ''' max_tries = 8 try: res = grequests.get(url) except: if n > max_tries: return none n += 1 log.warning('try #%s %s...' % (n, url)) time.sleep((2 ** n) + (random.randint(0, 1000) / 1000.0)) # add jitter 0-1000ms return self.grequester(url, n) else: return res
Comments
Post a Comment