@Emince

Как установить таймаут и лимит попыток подключений asyncio?

Как в можно добавить таймаут соединения и количество попыток подключений в функцию соединения с сервером

async def connect_whois_server(domain=None, server=None, port=80):
    try:
        reader, writer = await asyncio.open_connection(server, port)
        query = (domain + "\r\n").encode()
        writer.write(query)
        await writer.drain()

        response = b""
        while True:
            data = await reader.read(4096)
            if not data:
                break
            response += data
        writer.close()

        await writer.wait_closed()
        return response.decode()
    except Exception as e:
        print(f"Произошла ошибка при выполнении запроса: {e}")
        return None
  • Вопрос задан
  • 30 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
И то и другое делается руками.
Для таймаута, заверни вызов open_connection() в вызов asyncio.wait_for().
Для нескольких попыток, for _ in range(попыток).

В итоге получим что-то вроде:
for _ in range(attempts):
    try:
        reader, writer = await asyncio.wait_for(
            asyncio.open_connection(server, port),
            timeout
        )
    except (asyncio.TimeoutError, Exception):
        ...  # реагируем на ошибку соединения, пишем в лог или ещё что
    else:
        break  # соединение принято
else:  # относится к for, выполнится если не было break
    ...  # реагируем на исчерпание попыток
    # потом делаем return или throw
# если управление дошло досюда, соединение установлено
...  # работаем
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы