Я создаю REST API с помощью Flask-restplus. Одна из моих конечных точек берет файл, загруженный с клиента, и выполняет некоторый анализ. Работа занимает до 30 секунд. Я не хочу, чтобы работа блокировала основной процесс. Таким образом, конечная точка сразу же ответит 200 или 201, задание еще может быть запущено. Результаты будут сохранены в базе данных, которая будет получена позже.
Кажется, у меня есть два варианта для длительных работ.
- Threading
- Задача-очередь
Threading относительно проще. Но проблема в том, что для приложения Flask существует ограничение на количество потоков. В автономном приложении Python я мог бы использовать очередь для потоков. Но это REST API, каждый вызов запроса является независимым. Я не знаю, есть ли способ поддерживать глобальную очередь для этого. Поэтому, если количество запросов превышает ограничение потока, оно не сможет принимать больше запросов.
Задача с Celery и Redis, вероятно, является лучшим вариантом. Но это всего лишь доказательство концепции, а временные рамки довольно жесткие. Настроить Celery, Redis с Flask нелегко, у меня много проблем на моей машине с Windows Он будет развернут на AWS, что довольно сложно.
Интересно, есть ли третий вариант для этого случая?