【发布时间】:2015-08-15 02:29:16
【问题描述】:
我有一个基于cherrypy 构建的REST WebService。该服务通过cherrypy.quickstart() 调用上线。
我想在服务上线后立即使用subprocess.Popen() 启动后台进程。 cherrypy.quickstart() 呼叫被阻塞。如何添加回调来启动后台进程?
【问题讨论】:
标签: python rest subprocess cherrypy
我有一个基于cherrypy 构建的REST WebService。该服务通过cherrypy.quickstart() 调用上线。
我想在服务上线后立即使用subprocess.Popen() 启动后台进程。 cherrypy.quickstart() 呼叫被阻塞。如何添加回调来启动后台进程?
【问题讨论】:
标签: python rest subprocess cherrypy
如果您的后台任务很简单并且不受 CPU 限制,我建议您使用cherrypy.process.plugins.BackgroundTask。这是一个基于线程的解决方案。这是带有完整示例的an answer。
通常在 CherryPy 中,我们不传递回调来处理内部组件。相反,我们使用Plugins。 CherryPy 自己的组件,如会话数据过期或请求超时监视器、守护程序和 PID 写入器等都是插件。插件的生命周期绑定到the message bus。 FSM 图说明了状态变化。在您的插件中,您只需要处理一些对您的任务有意义的状态。
O
|
V
STOPPING --> STOPPED --> EXITING -> X
A A |
| \___ |
| \ |
| V V
STARTED <-- STARTING
This answer 有一个插件示例。另请查看 Sylvain Hellegouarch 的 Managing your process with the CherryPy’s bus。
【讨论】:
如果您必须使用cherrypy,您可以使用the bus 来获取有关进程启动/停止的通知。更好的方法是使用主管(主管或马戏团)来管理流程。
【讨论】: