如何使用 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 运行模块?的主要内容,如果未能解决你的问题,请参考以下文章
如何运行多个Django App Gunicorn systemd?
如何使用 gunicorn 为 django 配置 nginx?
如何调试使用 whitenoise、gunicorn 和 heroku 服务的 django 静态文件?