在cherrypyart成功快速入门后启动后台进程

时间:2015-06-01 14:56:53

标签: python rest subprocess cherrypy

我有一个基于cherrypy构建的REST WebService。该服务通过cherrypy.quickstart()电话上线。

我希望在服务上线后立即启动subprocess.Popen()后台进程。 cherrypy.quickstart()来电正在阻止。如何添加回调以启动后台进程?

2 个答案:

答案 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来获取有关流程开始/停止的通知。更好的方法是使用主管(主管或马戏团)来管理流程。