学习狗书flask web 换成waitress生产服务器牵扯到的三个知识点
使用waitress服务器要注意啦,控制台啥log都不会有!
每次运行flask app 的时候总会有这样一行警告:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
正好学到部署阶段让换生产服务器,由于是windows系统,改用waitress.
按照书上的指令:waitress-serve --port 8000 flasky:app
然而在浏览器中打开网址 http://0.0.0.0:8000,打不开
报错:0.0.0.0 目前无法处理此请求。HTTP ERROR 502。
这里牵扯到知识点1:“区分localhost、127.0.0.1和0.0.0.0”.
当时以为是书上的指令不管用,改用代码的形式(其实两者是等效的)
在flasky.py 中加入:
from waitress import serve
if __name__ == "__main__":
serve(app, host='0.0.0.0', port=8080)
# app.run(host='0.0.0.0', port=8080, debug=True)
用python flasky.py命令启动app,啥都不显示,我以为app没启动起来。
我忽略了两个细节,第一,刚才按照书上的指令:waitress-serve --port 8000 flasky:app启动app时,在网页各种点点点,发request,控制台竟然是静悄悄的。
之前用flask自带的开发服务器,网页发request,控制台会有下面这种日志
第二,回过头去翻书上《把生产环境中的错误写入日志》章节有这么一段话,现在才真正理解了:“......生产环境中发生的错误会被静默掉......在调试模式中,日志记录器把日志写入控制台;但在生产模式中,默认情况下没有配备日志的处理程序,所以如果不添加处理程序,就不会保存日志。”
知识点2:waitress服务器就是在控制台不显示日志的
另外,发现用flask run命令或者 pycharm右上角的run按钮 启动app,进不去flasky.py的 if name == "main"条件,还是用的默认服务器。打印__name__,发现不等于__main__而是等于‘flasky’。这里涉及到:知识点3:启动flask app 的几种不同的方式
-
知识点1:参考彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0和IP地址 0.0.0.0 是什么意思
在服务器中,0.0.0.0并不是一个真实的的IP地址,不能被ping通的,所以不能直接在浏览器访问。0.0.0.0代指是本机上的所有IPV4地址,可以用本机的环回地址127.0.0.1去浏览器访问 -
知识点2:waitress服务器不主动显示request日志,查看官方文档:
Logs for each request aren’t shown, only errors are shown. Logging can be configured through the Python interface instead of the command line.最后一句:
0.0.0.0 is not a valid address to navigate to, you’d use a specific IP address in your browser.也可以解释知识点1 -
知识点3:参考How to run a flask application?和What is the difference between using flask run vs python app.py vs python -m flask run? [duplicate]
我平时运行flask app三种方式:
①pycharm 右上角“run”按钮
②终端指令 : flask run
③终端指令: python flasky.py其中①和②__name__ != “__main__”: 自然运行的是默认服务器。为什么两者不相等?因为①和②相当于将flasky.py作为模块导入,而不是直接用python解释器运行。
③直接运用python解释器运行,进入到 if __name__ == “__main__”:内部,运行serve(app, host='0.0.0.0', port=8080)的waitress服务器。
总结:还是直接用waitress-serve --port 8000 flasky:app指令运行生产服务器waitress最方便。如果不是理解错了0.0.0.0地址,就没有后面这么多问题了。
->理解错0.0.0.0地址,误认为指令行不通
->改用编码的方式,改写flasky.py文件,使用python flasky.py指令运行。啥也不显示,误认为生产服务器没启动成功
-> 发现只能用python flasky.py指令运行,flask run 指令和pycharm 的run按钮都只运行默认开发服务器(原因是进不去 if __name__ == “__main__”:内部)
**最后补充一点:
注意pycharm 右上角run和右击鼠标flasky.py文件的run。
这两者有时候等价,有时候不等价。
两者在没有任何额外设置的情况下是等价的。但是如果pycharm 右上角的run开启FLASK_DEBUG模式等等操作,两者就不一样了
如何开启?
点击这个倒三角
Edit Configurations
开启这里的FLASK_DEBUG
可以看到这时右击鼠标flasky.py 来run文件,出现了一个新的啥设置都没有的配置
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)