【Python】已解决:WARNING: This is a development server. Do not use it in a production deployment.
2025-01-29
问题说明
警告信息:“WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.”这个警告信息表明当前的服务器环境仅适用于开发和测试,不应在生产环境中使用。
开发服务器(Development Server)是框架自带的轻量级服务器,方便开发者快速测试和调试应用。然而,它缺乏生产环境所需的安全性、稳定性和性能优化。因此,在部署到生产环境时,应该使用适合生产环境的WSGI服务器,如Gunicorn或uWSGI。
具体选择哪种 WSGI 服务器,可以参考:Gunicorn 和 uWSGI 的区别-CSDN博客
- 简单部署:如果你只需要一个简单的 WSGI 服务器,且不需要太多额外的功能,Gunicorn 是一个不错的选择。
- 复杂配置:如果你需要更多的配置选项和功能,或者计划使用多种协议,那么 uWSGI 可能更适合你。
代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True) # 开发服务器,适用于开发和测试
上述代码在开发环境中是完全正确的,但在生产环境中直接运行会导致性能和安全问题。因此会触发警告信息。
解决方法
1 使用Gunicorn来部署Flask应用
安装Gunicorn
pip install gunicorn
Flask示例代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
# 仅在开发环境中使用
if __name__ == '__main__':
app.run(debug=True) # 仅用于开发环境
运行命令
gunicorn -w 4 -b 127.0.0.1:8000 myapp:app
参数说明
-w 4表示使用4个工作进程。
-b 127.0.0.1:8000表示绑定到本地主机的8000端口。
myapp:app表示应用实例,其中myapp是Python文件名,app是Flask实例。
2 使用 Uvicorn来部署Flask应用
Uvicorn 是一个高性能的 ASGI 服务器,它在 Windows 上的表现通常优于 Gunicorn。
安装 Uvicorn
pip install uvicorn
Flask示例代码 同上
启动 Uvicorn
uvicorn myapp:app --host 127.0.0.1 --port 8000 --workers 4
3 内置的 WSGI 服务器
在开发和测试环境中,在 Windows 系统上快速测试验证,可以使用这个简单的替代方案来启动您的 WSGI 应用,既 wsgiref
模块中的 make_server
函数。这是一个内置的 WSGI 服务器。
示例代码
使用 wsgiref
的 make_server
函数启动一个 WSGI 应用:
示例应用
def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return [b"Hello, world!"]
if __name__ == '__main__':
from wsgiref.simple_server import make_server
httpd = make_server('127.0.0.1', 8000, application)
print("Serving on port 8000...")
httpd.serve_forever()
运行命令
python app.py