Посмотрите и скажите мне, если работает.
$(".dropdown-btn").click(function () {
$(this).toggle("active1");
var dropdownContent = $(this).next();
$(dropdownContent).toggle();
});
Это удается лучше с очередью и диспетчером.
Вы разделяете свою обработку на две стороны: источник и отправка. Они могут быть отдельными потоками (или разделить процессы, если это легче).
Исходная сторона создает и ставит в очередь запросы на любом уровне, делает их счастливыми.
Сторона Отправки делает это.
Получите время начала запроса, s.
Исключает запрос из очереди, обработайте запрос через удаленный сервис.
Получите текущее время, t. Сон для уровня - (t - s) секунды.
Если Вы хотите выполнить Исходную сторону, подключенную непосредственно к удаленной службе, можно сделать это и обойти ограничение уровня. Это хорошо для внутреннего тестирования с ложной версией удаленного сервиса.
Твердая часть об этом создает некоторое представление для каждого запроса, который можно ставить в очередь. Так как Очередь Python обработает почти что-либо, Вы не должны делать многого.
При использовании многопроцессорной обработки необходимо будет засолить объекты поместить их в канал.
ТАКИМ ОБРАЗОМ, я предполагаю, что что-то простое как время импорта time.sleep (2) не будет работать на ожидание 2 секунд между запросами
Ваша ограничивающая схема уровня должна быть в большой степени под влиянием соглашений о вызовах базового кода (синхронна или асинхронна), а также что объем (поток, процесс, машина, кластер?) это ограничение уровня будет работать в.
Я предложил бы сохранить все переменные в экземпляре, таким образом, можно легко реализовать несколько периодов/уровней управления.
Наконец, это кажется, что Вы хотите быть компонентом промежуточного программного обеспечения. Не пытайтесь быть приложением и представить потоки самостоятельно. Просто блок/сон, если Вы синхронны и используете асинхронную платформу диспетчеризации, если Вас звонит один из них.
Если бы Ваша библиотека разработана, чтобы быть синхронной, то я рекомендовал бы не учесть предельное осуществление (хотя Вы могли отследить уровни и по крайней мере помочь вызывающей стороне решить, как соблюдать пределы).
Я использую скрученный для взаимодействия через интерфейс с в значительной степени всем в наше время. Это помогает сделать тот тип вещи при наличии модели, которая разделяет представление запроса от обработки ответа. Если бы Вы не хотите, чтобы Ваши пользователи API должны были использовать скрученный, Вы, по крайней мере, были бы более обеспеченным пониманием их API для задержанного выполнения.
Например, у меня есть интерфейс Твиттера, который проталкивает довольно абсурдное количество запросов от имени xmpp пользователей. Я не оцениваю предел, но я действительно должен был сделать немного работы для предотвращения всех запросов одновременно.
Организация очередей может быть чрезмерно сложной. Простое решение состоит в том, чтобы дать Вашему классу переменную в течение времени, которым в последний раз назвали сервис. Каждый раз, когда сервис называют (! 1), установите время ожидания на delay - Now + lastcalltime
. delay
должно быть равно минимальному допустимому времени между запросами. Если это число положительно, сон для этого прежде, чем выполнить вызов (! 2). Недостаток/преимущество этого подхода - то, что он рассматривает запросы к веб-сервису, как являющиеся синхронным. Преимущество состоит в том, что это нелепо просто и легко для реализации.
Решение S.Lott более изящно, конечно.