Функция обратного вызова не выполняется в группе 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), функция обратного вызова не выполняется.