Начните фоновый процесс после успешного быстрого запуска в cherrypy
У меня есть веб-сервис REST, построенный поверх cherrypy. Служба переходит в оперативный режим с вызовом cherrypy.quickstart()
.
Я хочу начать фоновый процесс с subprocess.Popen()
сразу после запуска службы. Вызов cherrypy.quickstart()
блокируется. Как добавить обратный вызов для запуска фонового процесса?
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, вы можете использовать шину для получения уведомлений о запуске/остановке процесса. Лучшим способом было бы использовать супервайзера (супервайзера или цирка) для управления процессами.