Сельдерей @ task_postrun.connect не запускается

У меня есть signals.py внутри моего приложения project/jobs. Это файл:

from celery.signals import task_postrun, after_task_publish
from project.jobs.models import JobModel, JOB_STATUS_CHOICES

@after_task_publish.connect
def task_sent_handler(sender=None, headers=None, body=None, **kwargs):
    info = headers if 'task' in headers else body
    print('after_task_publish for task id {info[id]}'.format(info=info,))

@task_postrun.connect
def task_postrun_handler(task_id=None, **kwargs):
    print('CONNECT', task_id)
    JobModel.objects.filter(task_id=task_id).update(status=JOB_STATUS_CHOICES.SUCCESS)

task_sent_handler запускается, а task_postrun_handler - нет.

signals.py импортируется моим AppConfig внутри функции ready().

Это мой конфиг сельдерея:

CELERY_BROKER_URL = env('CELERY_BROKER_URL')
CELERY_SEND_EVENTS = True
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'

Any suggestions as to why task_postrun may not be fired?

Оба они относятся к категории «Задачи», поэтому я не понимаю, почему одно работает, а другое - нет.

Да, как правило, вы должны убедиться, что ваши сигналы подключены «вручную». См., Например, stackoverflow.com/questions/7115097/…

schwobaseggl 10.08.2018 17:38

В каком модуле вы импортируете сигналы? Этот модуль может быть выполнен только в процессе отправка задачи (таким образом, испуская сигнал after_task_publish), но не в процессе Бег задачи (испускающий сигнал task_postrun).

schwobaseggl 10.08.2018 17:42

@schwobaseggl Я импортировал сигналы в models.py, а позже переместил их в свой файл celery.py. Я ничего с этим не делаю, кроме импорта.

Giannis 10.08.2018 17:57

Кроме того, сигналы испускаются сельдереем, поэтому я не уверен, почему это имеет значение, какая модель загружает signal.py?

Giannis 10.08.2018 17:59

Обновили вопрос, чтобы удалить часть signals.py

Giannis 10.08.2018 18:57
0
5
1 045
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме