Как перезапустить работников из сельдерея изящно? - PullRequest
39 голосов
/ 19 марта 2012

При выпуске новой сборки для обновления кода у рабочих, как изящно перезапустить работников из сельдерея?

Редактировать: Я собираюсь сделать что-то вроде этого.

  • Работник работает, возможно, загружает файл размером 100 МБ в S3
  • Выпускается новая сборка
  • Код работника имеет изменения
  • Скрипт сборки запускает сигнал для рабочих (ей)
  • Запуск новых рабочих с новым кодом
  • Рабочий (и), получивший сигнал после завершения существующего выхода из работы.

Ответы [ 7 ]

44 голосов
/ 19 марта 2012

Новый рекомендуемый метод перезапуска работника описан здесь http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker

$ celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid
$ celery multi restart 1 --pidfile=/var/run/celery/%n.pid

Согласно http://ask.github.com/celery/userguide/workers.html#restarting-the-worker вы можете перезапустить работника, отправив сигнал HUP

 ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | xargs kill -HUP
11 голосов
/ 10 марта 2015
celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid
celery multi restart 1 --pidfile=/var/run/celery/%n.pid

http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker

4 голосов
/ 15 марта 2016

Если вы идете по маршруту kill, pgrep для спасения:

kill -9 `pgrep -f celeryd`

Имейте в виду, это не длительное задание, и мне все равно, если оно закончится жестоко.Просто перезагрузка нового кода во время разработки.Я бы пошел по пути перезапуска службы, если бы он был более чувствительным.

3 голосов
/ 19 марта 2012

Вы должны взглянуть на автозагрузку сельдерея

2 голосов
/ 29 апреля 2015

Я неоднократно проверял решение -HUP с помощью автоматического сценария, но обнаружил, что примерно в 5% случаев работник перестает выбирать новые задания после перезапуска.

Более надежное решение:

stop <celery_service>
start <celery_service>

, который я использовал сотни раз без каких-либо проблем.

Из Python вы можете запустить:

import subprocess
service_name = 'celery_service'
for command in ['stop', 'start']:
    subprocess.check_call(command + ' ' + service_name, shell=True)
1 голос
/ 05 июня 2019

Вы можете сделать:

мульти-перезагрузка сельдерея w1 -A your_project -l info # перезагрузка рабочих введите описание ссылки здесь

1 голос
/ 23 мая 2013

Что должно случиться с долго выполняющимися задачами?Мне нравится это так: долго выполняющиеся задачи должны делать свое дело.Не прерывайте их, только новые задачи должны получить новый код.

Но на данный момент это невозможно: https://groups.google.com/d/msg/celery-users/uTalKMszT2Q/-MHleIY7WaIJ

...