我有一个基于cherrypy构建的REST WebService。该服务通过cherrypy.quickstart()
电话上线。
我希望在服务上线后立即启动subprocess.Popen()
后台进程。 cherrypy.quickstart()
来电正在阻止。如何添加回调以启动后台进程?
答案 0 :(得分:5)
如果您的后台任务很简单并且没有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的{{3}}。
答案 1 :(得分:0)
如果您必须使用cherrypy,则可以使用the bus来获取有关流程开始/停止的通知。更好的方法是使用主管(主管或马戏团)来管理流程。