Рубрики
Без рубрики

Python запросы с повторными ресурсами

Примечание для себя спасибо Питеру Бенгтссону.

Примечание к себе

Большое спасибо Питер Бенгтссон

Это установит функцию, которая в качестве замены сброса на requests.get Звонок может позволить вам делать запросы с помощью RESRIES.

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry


def requests_retry_session(
    retries=3,
    backoff_factor=0.3,
    status_forcelist=(500, 502, 504),
    session=None,
):
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session

Некоторое тестирование всегда хорошо.

t0 = time.time()
try:
    response = requests_retry_session().get(
        'http://httpbin.org/status/500',
    )
except Exception as x:
    print('It failed :(', x.__class__.__name__)
else:
    print('It eventually worked', response.status_code)
finally:
    t1 = time.time()
    print('Took', t1 - t0, 'seconds')

Интуиция

Алгоритм этого отборочного перерыва задокументирован здесь : Коэффициент отключения для применения между попытками после второй попытки (большинство ошибок разрешаются немедленно второй попыткой без задержки). Urllib3 будет спать для: {коэффициент отступления} * (2 ^ ({количество общих повторений} – 1)) секунд. Если backoff_factor составляет 0,1, то Sleep () будет спать для [0,0 с, 0,2 с, 0,4 с, …] между повторными. Это никогда не будет длиннее, чем повторение. Backoff_max. По умолчанию отключен отключен (устанавливается на 0).

Оригинал: “https://dev.to/ssbozy/python-requests-with-retries-4p03”