Моя проблема в том, что функция обратного вызова вызывается только в том случае, если ни одна из подзадач группы не вызывает исключения. Однако если одна подзадача вызывает исключение, то вызывается дополнительный обработчик ошибок on_error() со строковым представлением Task_id аккорда. Остальные задачи в группе продолжают выполнение, но обратный вызов никогда не вызывается.
Я проиллюстрирую это примером ниже:
Код: Выделить всё
@app.task
def maybe_succeed():
divisor = randint(0, 10)
return 1 / divisor
@app.task
def master_task():
g = group([maybe_succeed.s() for i in range(100)])
c = g | chord_callback.s()
return c.delay()
@app.task
def chord_callback(results):
print 'Made it here!'
Сейчас я решаю эту проблему, перехватывая все исключения в моем эквиваленте Maybe_succeed(), чтобы аккорд никогда не прерывался. Я думаю, что это хорошее решение, хотя оно не кажется правильным.
Итак, мой вопрос:
Есть ли способ выполнить обратный вызов Celery Chord независимо от статуса возврата подзадач его группы?
Подробнее здесь: https://stackoverflow.com/questions/468 ... d-subtasks
Мобильная версия