python - 如何检测cherrypy是否正在关闭

标签 python cherrypy

我已经基于 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

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

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

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

关于python - 如何检测cherrypy是否正在关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078254/

相关文章:

python - 将一个类映射到 SQLAlchemy 中的多个表

nginx - 樱桃 : Do I really need to put it behind a frontend?

jquery - 如何使跨源资源共享 (CORS) 发布请求正常工作

python - 如何在将数据编码为 JSON 之前将数据从 SQLite 数据库中读取到字典中?

python - 使用sphinx处理字符串

python - Python可以用于客户端Web开发吗?

cherrypy - 帮助我更好地理解 CherryPy PageHandlers

python - 在谷歌中使用 unicode 从 python 脚本翻译 url

python - 导入错误 : No module name sklearn. external.six

Python 类到 Yaml/JSON