Gunicorn не перезагружает рабочего

Могу ли я сообщить Gunicorn о сбое, если один из рабочих не смог загрузиться? Я не хочу, чтобы gunicorn автоматически обрабатывал и перезагружал рабочего для меня, но я хочу, чтобы он не пытался запускать рабочего снова и снова. Должен ли я вызвать какое-либо конкретное исключение для основного процесса или какого-либо сигнала? Или я могу предоставить аргумент командной строки при запуске главного процесса? Я хочу реализовать что-то вроде этой логики в рабочем:

if cond():
    sys.exit(1)

а то весь гуникорн останавливать не перезапуская этого одного рабочего


person Most Wanted    schedule 24.05.2016    source источник


Ответы (1)


Итак, решение состоит в том, чтобы использовать перехватчики Gunicorn. их много, но для этого конкретного случая вы можете использовать хук 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 — перед выходом из пушки
  • pre_request – до того, как рабочий процесс обработает запрос.
  • on_starting — перед инициализацией главного процесса.

Вот и все!

person Most Wanted    schedule 25.05.2016