Умная задержка в запросах к API

Я пишу телеграм бота использующего асинхронную библиотеку aiogram. Он должен иногда посылать запросы к API. Из за ограничений это нельзя делать более чем раз в 1 раз в секунду. Я думал как можно ограничить число таких запросов. Каким образом это лучше всего реализовать.

  1. В методах обертки API добавить проверку на время прошлого запроса, заставив ее дополнительно хранить это время
async def get_smth(self):
        .....
        time_from_last_req: float = time.time() - self.last_request_time
        if time_from_last_req < 1:
            self.last_request_time = time.time() + 1 - time_from_last_req
            await asyncio.sleep(1 - time_from_last_req)
        r = await self.requester.get(URL, params)

Не вызовет ли это каких то проблем с асинхронностью, например что запросы могут "проснуться" в каком то неправильном порядке. Плюс мы создаем оч много отложеных задач, их количество может доходить то сотен (так как мы одновременно сгенерим 500 запросов, они будут выполняться "по очеверди" лягут в sleep на несколько мениут.

  1. Создать дополнительную асинхронную очередь, класть туда задачи на запрос к серверу, брать оттуда задачу каждую секунду и делать к ней запрос

Ответы (0 шт):