@shibanovan

Как правильно организовать работу длительных запланированных задач?

Добрый день! Для самообучения хочу написать приложение с вебинтерфейсом, котороя проходило бы по серверам и собирала бы с них файлы себе в архив.
Делать думаю на фласке, но суть не в этом. Не знаю как правильно организовать часть по сбору файлов с серверов. Как я сам представляю - это должен быть какой-то пул воркеров (отдельный процесс для каждого сервера), при этом в веб-интерфейсе хотелось бы смотреть текущее состояние воркера - т.е. от него нужно получать инфо.
Пока идея такая - веб-приложение на фласке - по сути интерфейс для базы данных с заданиями. И отдельно приложение, читающее эту БД. Но вот как организовать мультипоточность и обратную связь для веб-интерфейса?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
Если хотите именно Фласк, или иной фреймворк с WSGI-интерфейсом - у вас два пути.
1) Упороться с Celery, который нереально монструозен и в ряде случаев приводит к неизбежной кастомизации "под себя". Сюда же RabbitMQ или иной брокер очередей. СУБД для хранения результатов и статусов работы.
2) Пишите ещё одно независимое приложение "рядом": Взамен Celery сделайте что-нибудь своё, но попроще. Асинхронное или многопоточное, если для нужд самообучения - можно и такое и такое. Но тут снова транспорт сообщений, RabbitMQ или иной брокер.

Если на Фласке свет клином не сошёлся - можно сразу взять Tornado или AsyncIO и сделать "два в одном". Отдача веб-контента не будет сильно мешать асинхронной работе с серверами. В этом случае будет всё внутри одного сервера. Вопрос масштабируемости здесь оставим за рамками, вам пока оно ни к чему заморачиваться.

P.S. Поищите на ютубе доклады Романа Иманкулова, он очень хорошо излагает на тему своих "велосипедов" взамен Celery, etc.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
14 мая 2021, в 17:19
25000 руб./за проект
14 мая 2021, в 17:15
30000 руб./за проект
14 мая 2021, в 16:57
5000 руб./за проект