Найти - Пользователи
Полная версия: Обработка изображений, очередь задач
Начало » Web » Обработка изображений, очередь задач
1
mr.M
Здравствуйте. Стоит задача создать сервис, производящий некоторые преобразования над данными, полученными от пользователя. Происходить это должно следующим образом (на примере картинки):

1. Пользователь загружает на сервер картинку
2. Сервер запускает процесс (cli app), который производит некоторые преобразования над картинкой
3. Сервер отдает обработанную картинку пользователю

Нужно чтобы при загрузке изображения добавлялась задача, сервер следил бы за FIFO списком таких задач, и если этот список не пуст - брал оттуда задачу, выполнял ее и, при наличии, приступал к следующей, пока не будут выполнены все.

Есть ли какое-то решение для реализации такой логики?

P.S. В качестве базы для сайта предполагаю использовать Flask.

Спасибо.
py.user.next
mr.M
Есть ли какое-то решение для реализации такой логики?
У тебя должен быть контроль над сервером, чтобы ты мог запускать процессы на сервере, которые будут работать, пока не завершатся.
Без этого никакой процесс не будет выполняться сам и читать очередь. Каждое действие нужно будет инициировать вручную.

mr.M
В качестве базы для сайта предполагаю использовать Flask.
Flask'ом ты можешь только загружать и отдавать картинки. Делать сам по себе он ничего не будет, только по запросам он работает. Максимум, что он может, - это сохранять в память (в базу данных, например, или в файл). Но чтобы потом к этому обратиться, ему нужно будет говорить “обратись к этому”, сам он туда по расписанию не полезет.
Striver
Мы нечто подобное делали через celery, только веб-сервером у нас Джанго был.
По запросу создаётся задача celery, а клиенту сразу возвращается ответ, что запрос поставлен в очередь, и присвоенный id этого запроса. Когда задача из очереди отрабатывает, она скидывает свои результаты (или данные об ошибке, если что-то не так) в базу данных.
Клиент периодически делает запросы к веб-серверу, на тему “как там дела с моим запросом, у которого такой id?”, и в какой-то момент получает ответ, что работа закончена, результат такой-то. Вроде бы возможно с помощью неких вебсокетов сделать так, чтобы не спамить постоянными запросами от клиента, но в этом я уже не разбираюсь.

Вообще, celery довольно неприятная хрень, и с ней много мороки.
VadimK
Striver
Вообще, celery довольно неприятная хрень, и с ней много мороки.
Просто это решения для крупных проектов. И кстати очень удобное.

Можно еще использовать uwsgi задачи и таймеры.
https://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB