Проверка завершения задачи Celery не проверяет правильную задачуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проверка завершения задачи Celery не проверяет правильную задачу

Сообщение Anonymous »

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

Код: Выделить всё

@shared_task
def bulk_create_shipping_labels_task(skus, carrier, service, measurements, user_id):
start_time = time.time()
logger.info(f"Starting bulk shipping label creation for SKUs: {skus}")

orders = Order.objects.filter(
Q(items__sku__sku__in=skus) & Q(order_status='pending_fulfillment')
).distinct().values_list('order_id', flat=True)

# Create a chord of tasks
header = [process_single_order.s(order_id, user_id, carrier, service, measurements) for order_id in orders]
callback = collect_bulk_results.s()

# Execute the chord
chord_result = chord(header)(callback)

print('chord_result', chord_result)

end_time = time.time()
total_time = end_time - start_time

logger.info(f"Bulk shipping labels processing started. Total setup time: {total_time:.2f} seconds")

chord_info = {
'id': chord_result.id,
'state': chord_result.state,
'ready': chord_result.ready(),
'successful': chord_result.successful(),
'failed': chord_result.failed(),
}

return {
'message': 'Bulk shipping labels processing started',
'task_id': chord_result.id,
'chord_info': chord_info
}

Код: Выделить всё

@api_view(['GET'])
def check_bulk_shipping_status(request, task_id):
logger.info(f"Checking status of bulk shipping task: {task_id}")
try:
task_result = AsyncResult(task_id)

if task_result.ready():
result = task_result.get()
print('result', result)
return Response({
'status': 'completed',
'message': 'All tasks have finished processing',
})
else:
return Response({
'status': 'processing',
'message': 'Tasks are still processing'
})
except Exception as e:
return Response({
'status': 'error',
'error': str(e)
}, status=500)
Вместо этого я пробовал использовать группы и вызывать там идентификатор группы, но он всегда говорил, что группа не существует.

Подробнее здесь: https://stackoverflow.com/questions/791 ... rrect-task
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»