Я работаю над библиотекой Python, которая взаимодействует с API веб-сервисов. Как и многие веб-службы, с которыми я столкнулся, этот запрос требует ограничения скорости запросов. Я хотел бы предоставить необязательный параметр, limit
, в экземпляр класса, который, если он предоставлен, будет содержать исходящие запросы до тех пор, пока не пройдет указанное количество секунд.Как ограничить скорость запросов к веб-сервисам в Python?
Я понимаю, что общий сценарий следующий: экземпляр класса делает запрос с помощью метода. Когда это происходит, метод испускает какой-то сигнал, который где-то устанавливает значение блокировки, и начинает таймер обратного отсчета для количества секунд в limit
. (По всей вероятности, блокировка - это сам таймер обратного отсчета.) Если в течение этого временного кадра выполняется другой запрос, он должен быть поставлен в очередь до тех пор, пока таймер обратного отсчета не достигнет нуля и блокировка не будет отключена; на этом этапе отправляется самый старый запрос в очереди, и таймер обратного отсчета сбрасывается, и замок снова включается.
Это чехол для нарезания резьбы? Есть ли другой подход, который я не вижу?
Должен ли таймер обратного отсчета и блокировка быть переменными экземпляра или должны принадлежать классу, чтобы все экземпляры запросов на удержание класса?
Кроме того, как правило, это плохая идея предоставить функции ограничения скорости в библиотеке? Я считаю, что по умолчанию обратный отсчет равен нулю, библиотека по-прежнему позволяет разработчикам использовать библиотеку и предоставлять свои собственные схемы ограничения скорости. Тем не менее, для любых разработчиков, использующих эту услугу, все равно нужно будет ограничивать количество запросов, однако я полагаю, что для библиотеки было бы удобнее обеспечить ограничение скорости.
Независимо от размещения в библиотеке схемы ограничения скорости, я хочу написать приложение, используя библиотеку, поэтому предлагаемые методы пригодится.
Большое спасибо за ваши предложения!
Chris
Bad предположения. Он ждет 2 секунды.Это будет 2 секунды. между концом одного и началом другого. Обычно вы хотите 2 сек. между началом одного и началом другого. –
Ну, ожидание двух секунд между окончанием одного и началом другого может быть более безопасным, если лимиты выполняются на основе фактического времени между вызовами. Реальная проблема заключается в том, что ваше решение ожидает более двух секунд между запросами, поскольку для вычисления между запросами может потребоваться время. – Brian