【问题标题】:Start a background process upon successful quickstart in cherrypy在cherrypy中成功快速启动后启动后台进程
【发布时间】:2015-08-15 02:29:16
【问题描述】:

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

我想在服务上线后立即使用subprocess.Popen() 启动后台进程。 cherrypy.quickstart() 呼叫被阻塞。如何添加回调来启动后台进程?

【问题讨论】:

    标签: python rest subprocess cherrypy


    【解决方案1】:

    如果您的后台任务很简单并且不受 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

    【讨论】:

      【解决方案2】:

      如果您必须使用cherrypy,您可以使用the bus 来获取有关进程启动/停止的通知。更好的方法是使用主管(主管或马戏团)来管理流程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多