在 cherrypy 中成功快速启动后启动后台进程
Start a background process upon successful quickstart in cherrypy
我有一个基于 cherrypy 构建的 REST WebService。服务通过 cherrypy.quickstart()
调用上线。
我想在服务上线后立即用 subprocess.Popen()
启动后台进程。 cherrypy.quickstart()
调用正在阻塞。如何添加回调以启动后台进程?
如果您必须使用 cherrypy,您可以使用 the bus 在进程 start/stop 上获取通知。更好的方法是使用主管(主管或马戏团)来管理流程。
如果您的后台任务很简单并且不受 CPU 约束,我建议您使用 cherrypy.process.plugins.BackgroundTask
. It's a thread based solution. Here's an answer 和完整示例。
通常在 CherryPy 中,我们不会传递回调来处理内部组件。相反,我们使用 Plugins. CherryPy's own components like session data expiration or request timeout monitors, daemoniser and PID writer and others are Plugins. Plugin's life cycle is bound to the message bus。 FSM 图说明了状态变化。在您的插件中,您只需要处理一些对您的任务有意义的状态。
O
|
V
STOPPING --> STOPPED --> EXITING -> X
A A |
| \___ |
| \ |
| V V
STARTED <-- STARTING
This answer has a Plugin example. Also take a look at Managing your process with the CherryPy’s bus 作者:Sylvain Hellegouarch。
我有一个基于 cherrypy 构建的 REST WebService。服务通过 cherrypy.quickstart()
调用上线。
我想在服务上线后立即用 subprocess.Popen()
启动后台进程。 cherrypy.quickstart()
调用正在阻塞。如何添加回调以启动后台进程?
如果您必须使用 cherrypy,您可以使用 the bus 在进程 start/stop 上获取通知。更好的方法是使用主管(主管或马戏团)来管理流程。
如果您的后台任务很简单并且不受 CPU 约束,我建议您使用 cherrypy.process.plugins.BackgroundTask
. It's a thread based solution. Here's an answer 和完整示例。
通常在 CherryPy 中,我们不会传递回调来处理内部组件。相反,我们使用 Plugins. CherryPy's own components like session data expiration or request timeout monitors, daemoniser and PID writer and others are Plugins. Plugin's life cycle is bound to the message bus。 FSM 图说明了状态变化。在您的插件中,您只需要处理一些对您的任务有意义的状态。
O
|
V
STOPPING --> STOPPED --> EXITING -> X
A A |
| \___ |
| \ |
| V V
STARTED <-- STARTING
This answer has a Plugin example. Also take a look at Managing your process with the CherryPy’s bus 作者:Sylvain Hellegouarch。