请改用生产WSGI服务器

WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

WARNING: This is a development server. Do not use it in a production deployment‌ 这个警告信息通常出现在使用Flask这类Python web框架时,尤其是在通过简单的命令启动服务器进行开发测试时。Flask内置的服务器是为了开发和测试目的而设计的,它简单、轻量,但并不适合生产环境。生产环境需要更强大、更安全的服务器来处理高并发和各种安全问题‌12。

原因

这个警告的根本原因在于Flask默认的服务器不是用于生产环境的。它缺乏生产级别的功能,如有效的负载均衡、错误处理、安全措施等。使用这样的服务器在生产环境中会导致性能问题和安全风险‌12。

解决方法

安装Gunicorn‌:首先需要安装Gunicorn服务器,在Flask应用的环境中运行以下命令:

/www/wwwroot/Python/myenv/bin/pip3 install gunicorn

运行Gunicorn服务器‌:安装完成后,可以用以下命令来启动Gunicorn,并运行你的Flask应用:

/www/wwwroot/Python/myenv/bin/gunicorn -w4 tongyiwanxiang:app

gunicorn 默认是8000端口,如果想用5000端口

/www/wwwroot/Python/myenv/bin/gunicorn -w 4 -b 0.0.0.0:5000 tongyiwanxiang:app

守护进程

/www/wwwroot/Python/myenv/bin/gunicorn -w 4 -b 0.0.0.0:5000 -D tongyiwanxiang:app

Gunicorn服务报错-WORKER TIMEOUT

1.报错还原

在使用gunicorn部署flask程序时常常会出现WORKER TIMEOUT报错,如下图,接着,挂掉的worker又自动重启。虽然进程(worker)挂掉后会自动重启,对于一些启动耗时较短的程序没有问题,但是对于深度学习模型等启动较慢的程序这就比较影响请求响应速度了。

2.解决办法
先直接说下解决办法,然后分析原因,直接将gunicorn的参数配置中的timeout参数设置大一点即可,超时参数设置格式为”-t 超时时间(单位是秒)”,示例:

/www/wwwroot/Python/myenv/bin/gunicorn -w 4 -t 600 -b 0.0.0.0:5000 tongyiwanxiang:app

3.原因分析
首先解释一下timeout参数的作用,timeout是为了避免某一个客服端长期占用一个服务器中的worker(进程),当一个worker接收到一个客户端的请求后便开始计时,如果当前worker超过timeout时间还没有响应,那么程序会自动重启当前worker,防止一个进程被一直占用。所以在程序中有时会出现响应时间较长的请求而出现上述报错,即可将timeout参数设置大一点即可