Использование Python-декораторов для повторного запроса

У меня есть несколько функций в моем скрипте, который выполняет API-запросы REST API. Поскольку мне нужно обработать сценарии ошибок, я добавил механизм повтора, как показано ниже.

no_of_retries = 3
def check_status():
    for i in range(0,no_of_retries):
        url = "http://something/something"
        try:
            result = requests.get(url, auth=HTTPBasicAuth(COMMON_USERNAME, COMMON_PASSWORD)).json()
            if 'error' not in result:
                return result
            else:
                continue
        except Exception as e:
            continue
    return None

У меня есть несколько разных методов, которые выполняют аналогичные операции. Как мы можем сделать это лучше, чтобы избежать дублирования, используя декораторы.

4 голоса | спросил Gopi 9 Mayam18 2018, 08:47:22

2 ответа


0
Вместо использования декораторов, вероятно, лучшим решением будет перенести запрос в его собственную функцию, получив структуру, подобную этой:Таким образом, вы избегаете дублирования кода при инкапсуляции запроса.Если бы вы использовали декоратор, вам нужно было бы обернуть весь метод ---- +: = 1 =: + ----, что помешало бы вам продолжить обработку результата запроса в этой функции.
ответил IonicSolutions 9 Mayam18 2018, 08:54:15
0
если вы не возражаете против установки библиотеки, вы можете использовать модуль ---- +: = 0 =: + ---- ( github.com/jd/tenacity ).один из их примеров:это также позволяет вам указать количество попыток или секунд, которые вы хотите повторить.для вашего случая это может выглядеть примерно так (не проверено!):
ответил hiro protagonist 9 Mayam18 2018, 08:53:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132