Python 如何检测cherrypy是否正在关闭

Python 如何检测cherrypy是否正在关闭,python,cherrypy,Python,Cherrypy,我制作了一个基于cherrypy的服务器,但我有一个重复的任务,需要很长时间(超过一分钟)才能运行。这一切都很好,直到我需要关闭服务器,然后我永远等待线程完成 我想知道如何在客户端线程中检测到cherrypy关闭,以便在服务器关闭时线程可以中止 我想要这样的东西: class RootServer: @cherrypy.expose def index(self, **keywords): for i in range(0,1000):

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

我想知道如何在客户端线程中检测到cherrypy关闭,以便在服务器关闭时线程可以中止

我想要这样的东西:

class RootServer:
    @cherrypy.expose

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

您可以直接检查状态:

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

如果您还希望在服务器启动时启动lengthyprocess(或执行一些准备工作),而不是根据请求启动lengthyprocess,则后者尤其有用。

感谢您的出色响应。第二种技术不太有效,因为self.stop在线程停止之后才被调用,而线程在self.stop被调用之前不会停止。虽然有点死锁,但第一种技术效果不错。