我在 WSGI 服务器上的 Flask 应用程序中是否需要“if __name__ == '__main__': app.run()”?

问题描述 投票:0回答:1

我正在将 Flask 应用程序部署到 WSGI 服务器。在我的开发代码中,我有典型的

if __name__ == '__main__': app.run()
块来在本地运行应用程序。我不确定使用 WSGI 服务器时是否需要此代码片段。

在 WSGI 服务器上部署是否需要

if __name__ == '__main__': app.run()
块? 如果不通过
app.run()
,WSGI 服务器如何与我的 Flask 应用程序交互? 我已经阅读了 Flask 部署文档,但我希望能特别针对 WSGI 服务器进行澄清。

flask run 命令似乎在没有

if __name__ == '__main__': app.run()
块的情况下启动 Flask 应用程序,而直接运行
python app.py
则不然。这表明可能在其他地方定义了替代入口点。

python flask gunicorn wsgi flask-restful
1个回答
0
投票

问题

在部署中需要

if __name__ == '__main__': app.run()
Flask 应用程序中的此块。

解决方案

将 Flask 应用程序部署到 WSGI 服务器时,不需要 if name == 'main': app.run() 块。当您直接使用 Python app.py 执行脚本时,此块用于运行 Flask 开发服务器。然而,在具有 WSGI 服务器的生产环境中,服务器本身会调用应用程序的可调用对象(通常是 Flask 应用程序实例)来处理请求。

备用入口点

Different成为Flask应用程序的入口点 文档链接:

  • 独角兽
  • 女服务员
  • mod_wsgi
  • uWSGI
  • 活动
  • 活动
  • ASGI

我将使用 Gunicorn 进行展示,因为它是生产模式中的一个流行选项。

from flask import Flask
app = app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World

gunicorn -w 4 'hello:app'
© www.soinside.com 2019 - 2024. All rights reserved.