Как ограничить уровень запросов к веб-сервисам в Python?

Посмотрите и скажите мне, если работает.

$(".dropdown-btn").click(function () {
  $(this).toggle("active1");
  var dropdownContent = $(this).next();
  $(dropdownContent).toggle();
});
9
задан gotgenes 30 December 2008 в 21:29
поделиться

5 ответов

Это удается лучше с очередью и диспетчером.

Вы разделяете свою обработку на две стороны: источник и отправка. Они могут быть отдельными потоками (или разделить процессы, если это легче).

Исходная сторона создает и ставит в очередь запросы на любом уровне, делает их счастливыми.

Сторона Отправки делает это.

  1. Получите время начала запроса, s.

  2. Исключает запрос из очереди, обработайте запрос через удаленный сервис.

  3. Получите текущее время, t. Сон для уровня - (t - s) секунды.

Если Вы хотите выполнить Исходную сторону, подключенную непосредственно к удаленной службе, можно сделать это и обойти ограничение уровня. Это хорошо для внутреннего тестирования с ложной версией удаленного сервиса.

Твердая часть об этом создает некоторое представление для каждого запроса, который можно ставить в очередь. Так как Очередь Python обработает почти что-либо, Вы не должны делать многого.

При использовании многопроцессорной обработки необходимо будет засолить объекты поместить их в канал.

8
ответ дан 4 December 2019 в 15:28
поделиться

ТАКИМ ОБРАЗОМ, я предполагаю, что что-то простое как время импорта time.sleep (2) не будет работать на ожидание 2 секунд между запросами

0
ответ дан 4 December 2019 в 15:28
поделиться

Ваша ограничивающая схема уровня должна быть в большой степени под влиянием соглашений о вызовах базового кода (синхронна или асинхронна), а также что объем (поток, процесс, машина, кластер?) это ограничение уровня будет работать в.

Я предложил бы сохранить все переменные в экземпляре, таким образом, можно легко реализовать несколько периодов/уровней управления.

Наконец, это кажется, что Вы хотите быть компонентом промежуточного программного обеспечения. Не пытайтесь быть приложением и представить потоки самостоятельно. Просто блок/сон, если Вы синхронны и используете асинхронную платформу диспетчеризации, если Вас звонит один из них.

1
ответ дан 4 December 2019 в 15:28
поделиться

Если бы Ваша библиотека разработана, чтобы быть синхронной, то я рекомендовал бы не учесть предельное осуществление (хотя Вы могли отследить уровни и по крайней мере помочь вызывающей стороне решить, как соблюдать пределы).

Я использую скрученный для взаимодействия через интерфейс с в значительной степени всем в наше время. Это помогает сделать тот тип вещи при наличии модели, которая разделяет представление запроса от обработки ответа. Если бы Вы не хотите, чтобы Ваши пользователи API должны были использовать скрученный, Вы, по крайней мере, были бы более обеспеченным пониманием их API для задержанного выполнения.

Например, у меня есть интерфейс Твиттера, который проталкивает довольно абсурдное количество запросов от имени xmpp пользователей. Я не оцениваю предел, но я действительно должен был сделать немного работы для предотвращения всех запросов одновременно.

1
ответ дан 4 December 2019 в 15:28
поделиться

Организация очередей может быть чрезмерно сложной. Простое решение состоит в том, чтобы дать Вашему классу переменную в течение времени, которым в последний раз назвали сервис. Каждый раз, когда сервис называют (! 1), установите время ожидания на delay - Now + lastcalltime. delay должно быть равно минимальному допустимому времени между запросами. Если это число положительно, сон для этого прежде, чем выполнить вызов (! 2). Недостаток/преимущество этого подхода - то, что он рассматривает запросы к веб-сервису, как являющиеся синхронным. Преимущество состоит в том, что это нелепо просто и легко для реализации.

  • (! 1): Должен произойти прямо после получения ответа от сервиса, в обертке (вероятно, у основания обертки).
  • (! 2): Должен произойти, когда обертку Python вокруг веб-сервиса называют наверху обертки.

Решение S.Lott более изящно, конечно.

2
ответ дан 4 December 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: