Длительные задачи в веб-приложении Pyramid

Мне нужно запустить некоторые задачи на фоне веб-приложения (проверка кода и т. Д.), Не блокируя представления.

Твист в типичном сценарии Queue / Celery заключается в том, что я должен гарантировать, что задачи будут завершены, выжить даже при сбое веб-приложений или перезапустить их до тех пор, пока эти задачи не будут завершены, каков бы ни был их окончательный результат.

Я думал о записи параметров для multiprocessing.Pool в базе данных и запуск всех незавершенных задач при перезапуске webapp. Это выполнимо, но мне интересно, есть ли более простой или более рентабельный подход?

ОБНОВЛЕНИЕ: Почему не сам сельдерей? Ну, я использовал Celery в некоторых проектах, и это действительно отличное решение, но для этой задачи это на большой стороне: для этого требуется отдельный сервер, связь и т. Д., В то время как все, что мне нужно, порождает несколько процессов / потоков, работать в них ( git clone ... , svn co ... ) и проверять, удались ли они или не удалось. Еще одна проблема заключается в том, что мне нужно, чтобы решение было как можно меньше, так как я должен сделать это, следуя тщательно разработанным корпоративным принципам, процедурам и т. Д., А также административным и бюрократическим накладным расходам, которые я должен был бы пройти, чтобы получить сельдерей на борту Я бы предпочел избежать, если смогу.

One Solution collect form web for “Длительные задачи в веб-приложении Pyramid”

Я предлагаю вам использовать сельдерей.

Сельдерей не нуждается в собственном сервере, у вас может быть рабочий, работающий на одной машине. У вас также может быть «бедный человек» с использованием базы данных SQL вместо «реального» сервера очереди / сообщений, такого как RabbitMQ, – эта настройка будет очень похожа на то, что вы описываете, только с помощью отдельного процесса, выполняемые задачи.

Проблема с запуском длительных задач из процесса веб-сервера заключается в том, что в производственной среде веб-«рабочие» обычно управляются веб-сервером – несколько рабочих могут быть порождены или убиты в любое время. Жизнеспособность вашего подхода будет в значительной степени зависеть от используемого вами веб-сервера и его конфигурации. Кроме того, при работе нескольких рабочих, каждый из которых пытается выполнить задачу, у вас могут возникнуть проблемы с параллелизмом.

Помимо Celery, еще один вариант – посмотреть подсистему спулера UWSGI , особенно если вы уже используете UWSGI.

  • Как связать с request_loader Flask-Login с user_loader?
  • бегущий нос - с охватом, чтобы получить все файлы пакета, но не другие зависимости и библиотеки
  • Возможно ли в Python комментарий о переносе строки?
  • Объекты генератора Python: __sizeof __ ()
  • Функциональное API Keras альтернативное решение для pred_classes ()
  • Вызов другого представления в Pyramid
  • Является ли Python строго типизированным?
  • передача информации о настройках для удаления из носа
  • Python - лучший язык программирования в мире.