2016-10-12 5 views
2

Я использую grequests, чтобы сделать около 10 000 вызовов, но некоторые из этих вызовов возвращаются как 503. Эта проблема исчезает, если я не ставил очередь на все 10000 звонков одновременно. Разбить его на группы по 1000, кажется, делает трюк. Однако мне было интересно, есть ли способ поймать эту ошибку 503 и просто повторить request.Как поймать запрос ошибки 503 и повторить попытку

Это, как я звоню и комбинируя темы:

import grequests 
rs = (grequests.get(u, headers=header) for u in urls) 
response = grequests.map(rs) 

Я знаю, что это действительно расплывчатым, но я даже не знаю, если это возможно с помощью grequests.

Я naivley попытался

import grequests 
rs = (grequests.get(u, headers=header) for u in urls) 
time.sleep(1) 
response = grequests.map(rs) 

Но это не делает ничего, чтобы замедлить его.

ответ

2

Может быть, вы можете попробовать использовать перехватчики событий, чтобы поймать ошибку и повторно запустить на запросы http://docs.python-requests.org/en/master/user/advanced/#event-hooks

import grequests 

def response_handler(response): 
    if response.status_code == '503': 
     print('error.503') 

rs = (grequests.get(u, headers=header, hooks = dict('response' : response_handler)) for u in urls) 
response = grequests.map(rs)` 
0

Вы должны быть в состоянии применять общие методы, описанные в Can I set max_retries for requests.request? для настройки запросов и urllib3 делать повторные попытки , предполагая, что grequests позволяет настраивать базовые соединения или запросы.