Как использовать urllib3.Retry?

Я нашел следующий пример

def prepare_retry_requester(retries: int = 5, forcelist: List = (503,)) -> requests.Session:
    requester = requests.Session()
    retry = urllib3.Retry(total=retries, backoff_factor=1, status_forcelist=forcelist)
    for protocol in 'http://', 'https://':
        requester.mount(protocol, requests.adapters.HTTPAdapter(max_retries=retry))
    return requester


with prepare_retry_requester(forcelist=[502, 503, 413]) as requester:
    response = requester.post(url, data=serialized)

Но он все равно не работает, если я получаю 502 ошибки в течение некоторого времени (сервер перезагружается в течение 10 секунд).


person Ryabchenko Alexander    schedule 16.12.2019    source источник
comment
Вы передаете max_retries в HTTPAdapter, который не восстанавливается после ошибок 502 (по дизайну), поскольку это не ошибка соединения (а аппликативная). Вместо этого вы можете передать retries http.request. См. документы.   -  person Benjamin Gruenbaum    schedule 16.12.2019
comment
@BenjaminGruenbaum Это должен быть ответ. :)   -  person Quentin Pradet    schedule 17.12.2019


Ответы (1)


Вы передаете max_retries в HTTPAdapter, который не восстанавливается после ошибок 502 (по дизайну), поскольку это не ошибка соединения (а прикладная). Вместо этого вы можете передать повторные попытки в http.request. См. повторный запуск документов.

person Benjamin Gruenbaum    schedule 17.12.2019