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进程初始化之前
就是这样!
当其中一名工作人员无法启动时,我可以告诉 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进程初始化之前
就是这样!