Начните фоновый процесс после успешного быстрого запуска в cherrypy


У меня есть веб-сервис REST, построенный поверх cherrypy. Служба переходит в оперативный режим с вызовом cherrypy.quickstart().

Я хочу начать фоновый процесс с subprocess.Popen() сразу после запуска службы. Вызов cherrypy.quickstart() блокируется. Как добавить обратный вызов для запуска фонового процесса?

2 3

2 ответа:

Если ваша фоновая задача проста и не связана с процессором, я бы предложил вам использовать cherrypy.process.plugins.BackgroundTask. Это потоковое решение. Вот Ответ с полным примером.

Обычно в CherryPy мы не передаем обратные вызовы, чтобы идти вдоль внутренних компонентов. Вместо этого мы используем Плагины . Собственные компоненты CherryPy, такие как мониторы истечения срока действия данных сеанса или тайм-аута запроса, daemoniser и PID writer и другие, являются плагинами. Жизненный цикл плагина привязан к сообщению автобус . Диаграмма FSM иллюстрирует изменения состояния. В вашем плагине вам просто нужно обработать некоторые состояния, которые имеют смысл для вашей задачи.

                 O
                 |
                 V
STOPPING --> STOPPED --> EXITING -> X
   A   A         |
   |    \___     |
   |        \    |
   |         V   V
 STARTED <-- STARTING

Этот ответ имеет пример плагина. Также обратите внимание на управление процессом с помощью шины Cherrypy'S bus от Сильвена Хеллегуарха.

Если вам нужно использовать cherrypy, вы можете использовать шину для получения уведомлений о запуске/остановке процесса. Лучшим способом было бы использовать супервайзера (супервайзера или цирка) для управления процессами.