【Python】已解决:WARNING: This is a development server. Do not use it in a production deployment.

问题说明

警告信息:“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 服务器。

    示例代码

    使用 wsgirefmake_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

    作者:YYDataV软件开发

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】已解决:WARNING: This is a development server. Do not use it in a production deployment.

    发表回复