Flask基础学习之入坑出坑体验记录

2022-09-29 17:38:54 浏览数 (1)

[TOC]

0x00 问题解决

1.使用Flash原生的app.run运行一个简易的http服务用来提供接口,出现请勿在生产环境中使用开发服务器,使用生产WSGI服务器的提示。

错误信息: WARNING: Do not use the development server in a production environment. Use a production WSGI server

问题原因: 由于原生的 app.run(host="0.0.0.0", port=80) 只适用于开发模式,因为它是单线程的,生产环境影响性能,替代方案是可以用 uWSGI 或者 pywsgi。

代码语言:javascript复制
# 三者区别
1.app.run 启动的是单线程服务,性能很低

2.pywsgi 服务器使用的是gevent的pywsgi模块,性能不错,配置也很简单,但是它只是把单线程改造成了单线程异步方式

3.uWSGI 性能最好,配置稍微比上面难一点,但是它是支持多进程、多线程、和多协程的方式,简直就是完美,所以我选择尝试使用uWSGI服务器来替代

解决办法: 从上面可知解决版本无非两种 pywsgiuWSGI.

  • pywsgi 模块方式
代码语言:javascript复制
# 1.安装gevent模块
pip install gevent
# 2.在启动类里引入模块
from gevent import pywsgi
# 3.在main方法里将app.run替换
server = pywsgi.WSGIServer(('0.0.0.0', 80), app,)
server.serve_forever()
  • uWSGI 模块方式
代码语言:javascript复制
# 1.安装uWSGI模块
pip install uwsgi

# 2.在根目录下创建uWSGI配置文件(uwsgi.ini)
tee uwsgi.ini <<'EOF'
[uwsgi]
# 地址端口
http = 0.0.0.0:80
# 项目路径
chdir = /root/projectname
# 项目启动文件
wsgi-file = manage.py
# 项目需要调用的启动类
callable = app
# 进程线程设置
processes = 4
threads = 10
# 日志文件
daemonize = /app/logs/uwsgi.log
# 保存主进程pid文件
pidfile = uwsgi.pid
# 是否需要主进程
master = true
EOF

# 3.相关指令
# 启动
uwsgi --ini uwsgi.ini
# 重新加载
uwsgi --reload uwsgi.pid
# 停止
uwsgi --stop uwsgi.pid

# 4.Flask 入口文件(示例,app 后面需要自行实现)
# manage.py
from app import create_app
app = create_app()

if __name_ == '__main__':
  app.run(host="0.0.0.0", port=80)

0 人点赞