Уведомление или обратный вызов колбы после завершения работы удаленного сельдерея

Я запускаю сельдерейный клиент (Flask) и рабочий на двух разных машинах, теперь, когда рабочий выполнил задачу, мне нужно выполнить обратный вызов функции на стороне клиента. Это возможно?

Клиент сельдерея:-

celery_app=Celery('test_multihost', broker='amqp://test:test@<worker_ip>/test_host', backend='rpc')
result= testMethod1.apply_async((param1, param2,param3), link=testMethod2.s())

@celery_app.task
def testMethod2():
    #testMethod2 body.

Сельдерей Рабочий:-

celery_app=Celery('test_multihost', broker='amqp://test:test@<worker_ip>/test_host', backend='rpc')
@celery_app.task
def testMethod1():
   #testMethod1 body

Но проблема в том, что функция testMethod2 выполняется на стороне работника сельдерея, а не на стороне клиента.

Есть ли способ обратного вызова метода на стороне клиента?

2 ответа

Решение

Я решил эту проблему с помощью @after_task_publish из сигналов сельдерея. Фрагмент кода выглядит следующим образом:-

@after_task_publish.connect(sender=<registered_celery_task>)
def testMethod2(sender=None, headers=None, body=None, **kwargs):
    #callback body

TestMethod2 будет вызываться после завершения работы сельдерея на удаленной машине. Здесь я могу получить доступ к результату сельдерея, используя параметр заголовков.

Один из способов сделать это - заставить Celery записать свой результат в таблицу базы данных и использовать Flask для опроса результата задачи, многократно запрашивая базу данных. Похожая конструкция могла бы вести регистр выполненных задач в Redis, но суть была бы такой же.

Вы хотите вызвать сообщение о завершении для пользователя? Если вы можете уведомить по электронной почте / текстовым сообщением, вы, конечно, можете просто позволить Celery справиться с этим.

Если вам нужно запустить какой-то процесс Flask - а он действительно должен по какой-то причине находиться внутри экосистемы Flask - используйте воркер с requests модуль для вызова конечной точки, которую прослушивает Flask.

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