В соответствии с учебным пособием по сельдеру о мониторинге работы сельдерей в режиме реального времени можно также программно фиксировать события, производимые рабочими, и предпринимать соответствующие действия.
Мой вопрос заключается в том, как интегрировать монитор в качестве примера в этом в приложении Celery-Django?
EDIT: Пример кода в учебнике выглядит так:
from celery import Celery
def my_monitor(app):
state = app.events.State()
def announce_failed_tasks(event):
state.event(event)
task_id = event['uuid']
print('TASK FAILED: %s[%s] %s' % (
event['name'], task_id, state[task_id].info(), ))
with app.connection() as connection:
recv = app.events.Receiver(connection, handlers={
'task-failed': announce_failed_tasks,
'worker-heartbeat': announce_dead_workers,
})
recv.capture(limit=None, timeout=None, wakeup=True)
if __name__ == '__main__':
celery = Celery(broker='amqp://[email protected]//')
my_monitor(celery)
Итак, я хочу захватить событие task_failed, отправленное рабочим, и получить его task_id, как показано в уроке, чтобы получить результат для этой задачи из базы данных результатов, которая была настроена для моего приложения, и обработать ее дальше. Моя проблема в том, что для меня не очевидно, как получить приложение, так как в проекте django-celery я не прозрачен для экземпляра библиотеки Celery.
Я также открыт для любой другой идеи о том, как обрабатывать результаты, когда работник закончил выполнение задачи.