python - 烧瓶:异常后停止服务器
问题描述
一旦发生未处理的异常,我想停止我的烧瓶服务器。这是一个例子:
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中没有发现这种行为。您可以指定一个错误处理程序,但这只是在您的路由失败后向客户端提供自定义错误消息。
解决方案
停止 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
位是您在异常处理程序中需要的。
推荐阅读
- reactjs - 让电影 = 等待 response.data.films.map(film =>
- c# - 如何使用 Angular 和 ASP.NET Core 3.1 确认电子邮件
- json - .NET Core 控制台应用程序依赖注入 - 如何配置 Newtonsoft.Json 的使用以反序列化 IOptions<>
- web - RDweb: Cannot run legacy VB6 DLL more than once, at the same time
- laravel - 如何使用 laravel 同时减少 3 个操作(添加数据库、通知和广播)的执行时间?
- ajax - Pinterest Addtocart 事件代码 | 购物 | 涡轮主题
- java - 在Java中计算两个字符串之间的错误
- r - 如何按第一个和最后一个数据输入对特定数据帧进行排序?
- timer - attiny85 bit bang uart 与 arduino
- python - 在 Python 的 Line2D 中使用属性“figsize”的等价物是什么