Как запустить фоновое задание во Flask без потоков или очереди задач - PullRequest
0 голосов
/ 10 мая 2018

Я создаю REST API с помощью Flask-restplus. Одна из моих конечных точек берет файл, загруженный с клиента, и выполняет некоторый анализ. Работа занимает до 30 секунд. Я не хочу, чтобы работа блокировала основной процесс. Таким образом, конечная точка сразу же ответит 200 или 201, задание еще может быть запущено. Результаты будут сохранены в базе данных, которая будет получена позже.

Кажется, у меня есть два варианта для длительных работ.

  1. Threading
  2. Задача-очередь

Threading относительно проще. Но проблема в том, что для приложения Flask существует ограничение на количество потоков. В автономном приложении Python я мог бы использовать очередь для потоков. Но это REST API, каждый вызов запроса является независимым. Я не знаю, есть ли способ поддерживать глобальную очередь для этого. Поэтому, если количество запросов превышает ограничение потока, оно не сможет принимать больше запросов.

Задача с Celery и Redis, вероятно, является лучшим вариантом. Но это всего лишь доказательство концепции, а временные рамки довольно жесткие. Настроить Celery, Redis с Flask нелегко, у меня много проблем на моей машине с Windows Он будет развернут на AWS, что довольно сложно.

Интересно, есть ли третий вариант для этого случая?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Сельдерей - фантастическое решение этой проблемы, которое я довольно успешно использовал в прошлом для управления миллионами рабочих мест в день.

Единственный реальный недостаток - начальная кривая обучения и сложность отладки, когда дела идут плохо (это может случиться, особенно с миллионами рабочих мест).

Если вы открыты для размещенного решения, вы можете проверить Интегрированные в язык распределенные задачи Coherence API

В полном раскрытии это продукт, который я сделал, в качестве замены Celery в моих проектах. Начать работу относительно просто, чем в Celery, и вам не нужно управлять своей рабочей (или очереди) инфраструктурой.

0 голосов
/ 10 мая 2018

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

Кроме того, я бы сказал, что ЭТОТ будет отличным первым ресурсом для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...