python - 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
解决方案
您需要使用进程管理器(如supervisor
)将龙卷风进程与运行 wsgi 进程的 gunicorn 分开管理。
就 而言preload
,这是一种在工作人员开始之前加载代码的优化(文档):
在派生工作进程之前加载应用程序代码。
通过预加载应用程序,您可以节省一些 RAM 资源并加快服务器启动时间。虽然,如果您将应用程序加载推迟到每个工作进程,您可以通过重新启动工作程序轻松地重新加载应用程序代码。
推荐阅读
- javascript - 为什么在更改选项卡时有时画布动画会失败?
- javascript - Javascript 表单的问题
- java - 实例变量的引用存储在哪里?
- sqlite - 将随机结果与 Where 条件连接起来
- jquery - Ajax 无法在移动设备中运行,缺少什么?
- java - 在spring主应用程序中使用@Autowired
- python - 如何在使用 pytest 的整个测试过程中将用户的函数作为测试变量?
- java - 在每个 Apache Spark 工作节点上创建一个 java hbase 客户端实例
- go - 将带有指针值的 interface{} 类型传递给 interface{} 参数
- python - 忽略 VSCode 中的 Conda 虚拟环境