首页 > 解决方案 > 烧瓶:异常后停止服务器

问题描述

一旦发生未处理的异常,我想停止我的烧瓶服务器。这是一个例子:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    1/0 # argh, exception
    return 'Hello World!'


if __name__ == '__main__':
    app.run(port=12345)

如果你运行它并转到 localhost:12345,你的浏览器会告诉你“内部服务器错误”并且 python 控制台会记录一个DivisionByZero异常。

但服务器应用程序不会崩溃。Flask 将你的路由包装到它自己的错误处理中,它只打印异常。

我想让服务器在路由产生异常时立即停止。但我在API中没有发现这种行为。您可以指定一个错误处理程序,但这只是在您的路由失败后向客户端提供自定义错误消息。

标签: pythonflask

解决方案


停止 Flask 需要进入 Werkzeug 内部。见http://flask.pocoo.org/snippets/67/

从单用户应用程序中提取:

from flask import request

@app.route('/quit')
def shutdown():
    ...
    shutdown_hook = request.environ.get('werkzeug.server.shutdown')
    if shutdown_hook is not None:
        shutdown_hook()
    return Response("Bye", mimetype='text/plain')

shutdown_hook位是您在异常处理程序中需要的。


推荐阅读