2016-05-24 10 views
1

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

if cond(): 
    sys.exit(1) 

, а затем все gunicorn остановить без перезапуска этого одного работника

ответ

1

Таким образом, решение заключается в использовании 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) 

И код работника может быть простой колба приложение, например (содержание app_module.py:

from flask import Flask 

app = Flask() 

Другие полезные крючки:

  • on_exit - перед выходом gunic Орн
  • pre_request - до того, как работник обрабатывает запрос
  • on_starting - до того, как основной процесс инициализируется

Вот оно!