Gunicorn不会重新加载工人

时间:2016-05-24 11:24:01

标签: python web wsgi gunicorn web-worker

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

if cond():
    sys.exit(1)

然后所有枪手停止而不重新启动这一名工人

1 个答案:

答案 0 :(得分:2)

所以,解决方案是使用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 - 在工作人员处理请求之前
  • on_starting - 在初始化主进程之前

就是这样!