Gunicorn 不重新加载 worker

Gunicorn do not reload worker

当其中一名工作人员无法启动时,我可以告诉 Gunicorn 失败吗?我不希望 gunicorn 自动为我处理和重新加载 worker,但我希望它失败而不是一次又一次地尝试启动 worker。我应该向主进程或某些信号提出任何特定的异常吗?或者我可以在启动主进程时提供命令行参数? 我想在 worker 中实现这样的逻辑:

if cond():
    sys.exit(1)

然后所有 gunicorn 停止而不重新启动这个 worker

因此,解决方案是使用 Gunicorn hooks. 它们有很多,但对于这种特殊情况,您可以使用 worker_int 钩子。 用法示例可能如下(简化版,用gunicorn app_module:app --config gunicorn_config.py启动),gunicorn_config.py的内容:

import sys

workers = 1
loglevel = 'debug'

def worker_int(worker):
    print('Exit because of worker failure')
    sys.exit(1)

你的工作代码可能是一个简单的 Flask 应用程序(app_module.py 的内容:

from flask import Flask

app = Flask()

其他有用的钩子:

  • on_exit - 在退出 gunicorn
  • 之前
  • pre_request - 在 worker 处理请求之前
  • on_starting - 在master进程初始化之前

就是这样!