【问题标题】:How to detect if cherrypy is shutting down如何检测cherrypy是否正在关闭
【发布时间】:2012-06-18 07:05:33
【问题描述】:

我已经制作了一个基于cherrypy 的服务器,但是我有一个需要很长时间(超过一分钟)才能运行的重复性任务。这一切都很好,直到我需要关闭服务器,然后我一直在等待线程完成。

我想知道您如何检测客户端线程内的樱桃关闭,以便在服务器关闭时线程可以中止。

我追求的是这样的:

class RootServer:
    @cherrypy.expose

    def index(self, **keywords):
        for i in range(0,1000):
            lengthyprocess(i)
            if server_is_shutting_down():
                return

【问题讨论】:

    标签: python cherrypy


    【解决方案1】:

    您可以直接检查状态:

    if cherrypy.engine.state != cherrypy.engine.states.STARTED:
        return
    

    或者,您可以在“停止”频道上注册一个监听器:

    class RootServer:
    
        def __init__(self):
            cherrypy.engine.subscribe('start', self.start)
            cherrypy.engine.subscribe('stop', self.stop)
    
        def start(self):
            self.running = True
    
        def stop(self):
            self.running = False
    
        @cherrypy.expose
        def index(self, **keywords):
            for i in range(0,1000):
                lengthyprocess(i)
                if not self.running:
                    return
    

    如果您还希望在服务器启动时而不是在请求时启动冗长的进程(或执行一些准备),则后者特别有用。

    【讨论】:

    • 感谢您的出色回复。第二种技术不太奏效,因为直到线程停止后才调用 self.stop 并且在调用 self.stop 之前线程不会停止。有点僵局,但第一种技术很有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2010-11-02
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多