首页 > 解决方案 > Gunicorn 仅在发送某些请求时启动工作者

问题描述

我已经gunicorn为 5 名工人配置了。然而只有 1 启动其他就像处于睡眠状态。只有当我尝试登录时,即向他们发送请求时,他们才会第一次分叉/启动。下面是配置。

$VIRT_ENV/gunicorn -c config.py utrade.wsgi:application \
                          --preload \
                          --log-level=debug \
                          --timeout=30 \
                          --access-logfile=- \
                          --access-logformat="%(r)s %(s)s" \
                          --log-file=-

在 django 视图文件中有 tornado worker initilaztion 代码,有某种依赖关系,我希望所有 tornado 进程在用户登录之前启动。为了清楚起见,假设我放入print('Hello')了我的 djangoviews文件。在处理请求之前,它不会由工作人员打印。

如何让 gunicorn 启动所有工作人员而不等待请求?我尝试preload了flag,但没有帮助。

配置文件

bind = 'unix:/code/internal.utradesolutions.com/tanmay.garg/web/web/utrade/run/gunicorn.sock' 
workers = 5 
daemon=True

标签: pythondjangogunicorn

解决方案


您需要使用进程管理器(如supervisor)将龙卷风进程与运行 wsgi 进程的 gunicorn 分开管理。

就 而言preload,这是一种在工作人员开始之前加载代码的优化(文档):

在派生工作进程之前加载应用程序代码。

通过预加载应用程序,您可以节省一些 RAM 资源并加快服务器启动时间。虽然,如果您将应用程序加载推迟到每个工作进程,您可以通过重新启动工作程序轻松地重新加载应用程序代码。


推荐阅读