Задать вопрос

Python как параллельно выполнять GET запросы с получением ответа?

Добрый день, необходимо на Python сделать следующее:

На данный момент программа слушает последовательный порт, и когда там возникает событие она его принимает и делает отправку на сервер путем GET запроса.
Все хорошо, но вот возникают ситуации, когда связь с сервером отсутствует и получается что значение улетает вникуда. Как сделать так, что бы отправка повторялась скажем каждые 2 секунды до тех пор пока не придет ответ 200. При этом в случае отсутствия связи, таких отправок может накопиться много, но все они не должны быть утеряны.
  • Вопрос задан
  • 645 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@deliro
Недавно делал обёртку для SteamAPI. Так как он очень лагающий, использовал такой класс-декоратор:
class Retry(object):
    """
    Retries function with exponential delay if it's releasing exception.
    """
    def __init__(self, tries, exceptions=None, delay=1, exponent=1.5):
        self.tries = tries
        if exceptions:
            self.exceptions = tuple(exceptions)
        else:
            self.exceptions = (Exception,)
        self.delay = delay
        self.exponent = exponent

    def __call__(self, f):
        def fn(*args, **kwargs):
            exception = None
            for i in range(self.tries):
                try:
                    return f(*args, **kwargs)
                except self.exceptions as e:
                    delay = self.delay * self.exponent ** i
                    if i + 1 == self.tries:
                        raise exception
                    sleep(delay)
                    exception = e
            raise exception
        return fn


Ну и использование такое:
@Retry(3)
def f():
    ...


Повторяет функцию ещё раз (заданное кол-во раз), если функция вернула exception. Каждый раз время увеличивается экспоненциально.

Что касается асинхронности - копайте в сторону asyncio и aiohttp.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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