Как отправлять запросы с использованием асинхронной обработки с задержкой в одну секунду между каждым запросом?

Каким образом можно осуществить управление частотой запросов к API сайта (ограничение в 1 запрос в секунду) в контексте использования aiogram для разработки асинхронного бота? Хотя я уже попробовал использовать функцию asyncio.sleep(1) для задержки между запросами и установить таймаут с помощью aiohttp.ClientTimeout(total=1), это не привело к желаемому результату.
  • 8 декабря 2023 г. 20:58
Ответы на вопрос 2
Для осуществления задержки между запросами на время, равное одной секунде, вам рекомендуется использовать функцию `asyncio.sleep(1)` вместо `aiohttp.ClientTimeout(total=1)`. 

Пример использования:

```python
import asyncio
import aiohttp

async def make_request():
    # ... код для отправки запроса ...
    
    # Задержка в одну секунду
    await asyncio.sleep(1)

async def main():
    async with aiohttp.ClientSession() as session:
        # ... код инициализации aiogram ...
    
        # Цикл для отправки запросов
        for _ in range(10):
            await make_request()
            
        # ... дополнительный код основной логики ...

# Запуск основной функции
asyncio.run(main())
```

В этом примере `make_request()` - это асинхронная функция, которая отправляет запросы. Поэтому, когда вы вызываете `await make_request()`, выполнение кода приостанавливается на одну секунду перед отправкой следующего запроса. 

Обратите внимание, что использование `asyncio.sleep()` в этом примере устанавливает задержку между каждым вызовом `make_request()`, а не между ответом на один запрос и отправкой следующего. Это может быть полезным для управления частотой запросов к API сайта. 
Однако, если вам также нужно учитывать время загрузки ответа от сервера, вам необходимо включить задачу ожидания загрузки ответа перед отправкой следующего запроса, используя `await response.read()` и `await response.release()` после получения ответа.
ну так не делай тупо gather, а делай один обычный цикл (или очередь), внутри которого запрос к сайту и asyncio.sleep(1) после него 

почему то код работал на 6-7 запросе быстрее чем раз в 1с (без понятия как, но я ловил ошибку 429).
нам конечно уже угадывать, чё ты там понаписал?

aiohttp.ClientTimeout(total=1)
это вообще другое, это про ожидание ответа от сервера, почитай доку
Похожие вопросы