@m0ody
backend dev (python, django, postgresql, celery)

Celery: как заставить chord выполнять callback при возникновении Exception в тасках?

@shared_task(time_limit=10)
def task_err():
    ...
    raise Exception()

@shared_task
def task_success():
    ...

@shared_task
def callback(result):
     ...

chord([task_success.s(), task_err.s()], callback.s()).apply_async()

Получаем ошибку:
Chord callback for 'dad01f6b-bfdd-48a1-aacb-c4d713de0988' raised: ChordError('Dependency e7309f65-a741-4027-8a52-7d5e230f98c5 raised <ExceptionInfo: Exception()>',)
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\celery\backends\redis.py", line 221, in _new_chord_return
    callback.delay([unpack(tup, decode) for tup in resl])
  File "C:\Python27\lib\site-packages\celery\backends\redis.py", line 184, in _unpack_chord_result
    raise ChordError('Dependency {0} raised {1!r}'.format(tid, retval))
ChordError: Dependency e7309f65-a741-4027-8a52-7d5e230f98c5 raised <ExceptionInfo: Exception()>


Как побороть такое? Можно конечно обрабатывать ошибки в тасках и возвращать код ошибки или сам exception, но как быть, если стоит time_limit? Такое в таске не обработать.
  • Вопрос задан
  • 2624 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы