Функция обратного вызова не выполняется в группе Django Celery, когда одна задача не выполнена

Я работаю над проектом Django, который использует Celery для асинхронного выполнения группы задач. Я заметил, что когда одна из задач в группе терпит неудачу, функция обратного вызова не выполняется.

Вот обзор моей установки:

Определение группы задач: Я использую группу из celery для совместного выполнения нескольких задач. Функция обратного вызова: Функция должна выполняться после завершения всех задач в группе, независимо от их успеха или неудачи. Проблема: Если какая-либо задача в группе не выполняется, функция обратного вызова не срабатывает.



@shared_task
def fun1():
 
    return "Task 1 completed successfully"


@shared_task
def fun22():
    print('Task22')

    raise ValueError('Error')


@shared_task
def fun3():
    return "Task 3 completed successfully"


@shared_task(bind=True)
def callback_task(results):
    print("Callback@@@@@@@@@@@@@@")
    processed_results = []
    errors = []

    for result in results:
        if isinstance(result, dict) and result.get("status") == "error":
            errors.append(result)
        else:
            processed_results.append(result)

    if errors:
        print(f"Errors encountered: {errors}")
    else:
        print(f"All tasks succeeded. Results: {processed_results}")

    return {"processed_results": processed_results, "errors": errors}


@shared_task
def error_handler():
    print('Handler')
    return "error handler"


@shared_task
def fun2():
    task_group = [
        fun1.s(),
        fun22.s().on_error(error_handler.s()),
        fun3.s(),
    ]

    result = chord(task_group, callback_task.s()).apply_async()

    print(f"Group Id: {result.id}")
    return result.id

Ожидаемое поведение: Даже если одна задача не выполнится, функция обратного вызова должна выполнить и обработать результаты или неудачи.

Фактическое поведение: Когда одна из задач в группе терпит неудачу (например, задача2), функция обратного вызова не выполняется.

Вернуться на верх