Лучший подход для решения длительного опроса на стороне сервера - PullRequest
2 голосов
/ 17 января 2020

У меня есть сценарий использования, когда мне нужно опрашивать API каждые 1 сек c (в основном бесконечно, пока l oop). Опрос будет инициирован пользователем динамически через внешнюю систему. Это значит, что одновременно может быть запущено несколько опросов. Опрос будет завершен, когда API вернет 400. В любом случае, моя текущая реализация выглядит примерно так:

  1. Flask APP развернуто на heroku.
  2. Flask APP имеет конечную точку какая внешняя система вызывает, чтобы начать опрос.
  3. Эта конечная точка flask добавит сообщение в очередь и, как только работник получит его, начнет опрос. Я использую Heroku Redis для Go дополнений. Под капотом используется python -rq и redis.

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

Каков наилучший подход для решения этой проблемы? Запустить несколько рабочих?

Что если потенциально может быть более 100 одновременных процессов.

1 Ответ

0 голосов
/ 17 января 2020

Вы можете реализовать «взвешенную» / приоритетную очередь. Может быть несколько способов реализовать это, но самый простой пример, который мне приходит в голову, - это использование кучи min или max.

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

PS Больше рабочих также ускорит работу.

...