如何使用 gunicorn 运行模块?

Posted

技术标签:

【中文标题】如何使用 gunicorn 运行模块?【英文标题】:How to run a module with gunicorn? 【发布时间】:2022-01-19 23:14:13 【问题描述】:

我有一个已配置为 python 模块的烧瓶应用程序。

为了进一步解释,这是我项目的简化结构:

project_dir
  ven
  dir_a
      dir_b
           flask_app
                 __init__.py
                 __main__.py
# __main__.py
.
.
.
app = create_app(...)
client = Client(app)
.
.
.
print("Hello World")
running_app = app.run("0.0.0.0", port=5000)

当我想运行我的应用程序时,我点击python -m dir_a.dir_b.flask_app

现在我想用 gunicorn 运行它。

这是一个运行 gunicorn 的示例,供您参考

gunicorn -w 1 -b 0.0.0.0:5000 **wsgi:server**

如果我想运行应用程序,我从 project_dir 运行

python -m dir_a.dir_b.flask_app

在我的情况下,我应该如何使用 gunicorn 运行我的应用程序?

请注意,我希望在运行应用程序之前打印“Hello World”


我尝试过的:

gunicorn -w 1 -b 0.0.0.0:5000 dir_a.dir_b.flask_app:running_app

然后我删除了running_app = app.run("0.0.0.0", port=5000)这一行 并尝试过

gunicorn -w 1 -b 0.0.0.0:5000 dir_a.dir_b.flask_app:app

gunicorn -w 1 -b 0.0.0.0:5000 dir_a.dir_b.flask_app:create_app(...)

他们都没有工作

【问题讨论】:

【参考方案1】:

你需要告诉 gunicorn 运行什么应用

app.run() 方法适用于开发服务器,所以首先您必须将其注释掉或直接删除。

然后

gunicorn -w 1 -b 0.0.0.0:5000 dir_a.dir_b.flask_app:app

或者您可以在模块中进一步导入应用程序。

【讨论】:

我编辑了问题 顺便说一句,这不是在回答我的问题 不需要编辑问题,我的意思是在代码中。基本上,app.run() 将启动 Flask 的开发服务器,它非常适合开发,但就像您可能读到的那样,gunicorn 或 uWSGI 更适合 prod。因此,使用 gunicorn 运行应用程序的第一步不是启动开发服务器。然后,您只需将 gunicorn 指向正确的应用程序(即您删除了 app.run() 的同一个应用程序)。 请看这个教程,它正在做我所做的towardsdatascience.com/… 你不应该在生产环境中使用app.run(…),因为它是development server。您需要为 prod 使用更好的选项,它们被列出 here 而 gunicorn 是 here,我最好的猜测是 __main__.py 当您将模块作为程序运行时,gunicorn 不会仅由 python 执行,这就是为什么我的 @ 987654329@ 评论有效,将代码移至导入的文件并重试,这就是我所拥有的。

以上是关于如何使用 gunicorn 运行模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在多线程模式下使用 Gunicorn 运行 Flask

如何运行多个Django App Gunicorn systemd?

如何使用 gunicorn 为 django 配置 nginx?

如何调试使用 whitenoise、gunicorn 和 heroku 服务的 django 静态文件?

如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?

如何运行与 gunicorn 绑定的 django 应用程序?