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