Подтвердить что ты не робот

Где вы должны обновить настройки сельдерея? О удаленном работнике или отправителе?

Где вы должны обновить настройки сельдерея? На удаленном рабочем месте или отправителе?

Например, у меня есть API, использующий Django и Celery. API отправляет удаленные задания своим удаленным сотрудникам через брокера (RabbitMQ). Рабочие работают с python script (не используя Django), иногда эти работы порождают подзадачи.

Я создал настройки сельдерея с обеих сторон (отправитель и рабочий), то есть они оба нуждаются в настройке BROKER_URL. Однако, скажем, я хочу добавить настройку CELERY_ACKS_LATE = True, , к какому концу добавить этот параметр? Каждый из удаленных сотрудников или отправителя (API)?

И API, и удаленные рабочие соединяются с одним и тем же Брокером, каждый по-разному запускает сельдерей. API создает экземпляр сельдерея через Django __init__.py, и рабочие начинают сельдерей через супервизор, т.е. celery -A tasks worker -l info

4b9b3361

Ответ 1

настройки django celery влияют только на рабочих, работающих на самом сервере django.

если все ваши работники являются удаленными сотрудниками (как я это делаю), то на стороне отправителя все, что вам нужно, - это установить конфигурацию, необходимую для отправки задачи в очередь задач.

и все остальные настройки должны быть установлены для удаленных сотрудников.

и для задач на стороне отправителя все, что мне нужно сделать, это определить подпись задачи следующим образом:

@app.task(name='report_task')
def reportTask(self, link):
    pass

то на стороне рабочего вам нужно создать новое приложение Celery с тем же именем и указывая на одного и того же брокера; для других настроек сельдерея вам нужно объявить их на удаленных работников.

и реализовать логику задач для удаленных работников (у вас может быть логика различных задач для каждого рабочего, если у них одинаковое имя задачи и аргументы функции)

Ответ 2

CELERY_ACKS_LATE = True принадлежит работнику. В нем описывается, должен ли работник отмечать задачу "признано" сразу после потребления (до завершения) или после завершения (позднее). Оба метода имеют свои недостатки, и я думаю, вы знаете, что делаете.

Конечно, было бы лучше иметь один файл конфигурации для обеих сторон и использовать его. Например, у вас есть общая база кода для всего проекта и после обновления файла в VCS и развертывания - перезапустите все стороны.

Но в этом случае с этим конкретным флагом вы можете перезапустить только работников.