Возможное состояние гонки при ограничении создания модели по количеству

У меня есть функция представления django, представляющая процесс выкупа приза. Я пытаюсь устранить возможное условие гонки при установке лимита выкупа на основе подсчета связанной модели (Redemption). На высоком уровне моя функция представления выглядит следующим образом:

def redeem(request, prize_id):
    # Get a prize model that contains a limit attribute
    prize = Prize.objects.get(id=prize_id)

    # Check the count of a set of another model representing redemption objects 
    if (prize.redemption_set.count() >= prize.redemption_limit):
        return error_page("Reached redemption limit")
    else:
        # Run some API calls that redeem the prize
        # Create a redemption object in the DB
        redemption = Redemption(prize=prize)
        redemption.save()

Итак, меня беспокоит то, что при одновременном поступлении запросов я вижу возможность возникновения дополнительных выкупов, если счетчик не будет обновлен к моменту поступления другого запроса. Я рассматривал select_for_update() и атомарные запросы, но я не хочу, чтобы возникали ошибки, если модель заблокирована. В основном я хочу убедиться, что вызовы выкупа попадают в очередь и соответствующим образом отклоняются при достижении лимита выкупа. У меня будет несколько веб-рабочих, а моя БД - mySQL.

Спасибо за любые советы!

< <

Я полагаю, я сделал что-то неправильно в первый раз, и пока я продолжаю составлять композицию со старым изображением, проблема просто продолжает всплывать.

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

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