Вступить в клуб →
средняявопросКэш, очереди и надёжность сервисов

Фоновая задача иногда не находит в базе только что созданный заказ

with transaction.atomic():
    order = Order.objects.create(user=user, total=total)
    send_confirmation.delay(order.id)
    reserve_stock(order)          # ещё несколько запросов в базу

Задача Celery send_confirmation делает Order.objects.get(id=order_id) и периодически падает с DoesNotExist, хотя заказ в базе в итоге есть. Почему?

  • Задача уходит в очередь до коммита, и воркер читает базу раньше него
  • Celery передаёт id строкой, и get не находит заказ по числовому ключу
  • Воркер подключён к другой базе данных, чем веб-приложение
  • Внутри atomic нельзя вызывать delay — Celery отменяет задачу

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела