Django атомный логический - PullRequest
       2

Django атомный логический

1 голос
/ 06 ноября 2010

Кто-нибудь знает, как читать / писать атомное логическое поле в Django? Я пытаюсь сделать следующее:

У меня есть поле в модели с именем email_sent. Всякий раз, когда я получаю уведомление о мгновенной оплате (IPN) от нашего обработчика платежей, я хочу отправить уведомление по электронной почте. Поскольку я получаю несколько уведомлений и просто хочу отправить 1 электронное письмо с квитанцией, я (пока) просто использую проверку в модели, было ли электронное письмо с квитанцией уже отправлено или нет. Однако иногда я получаю несколько IPN одновременно для одного и того же пользователя. Я не хочу отправлять несколько писем, но следующий код вводит условие гонки:

if purchase.email_sent:
    self.send_email()
    purchase.email_sent = True
purchase.save()

Это явно не правильный подход, но как реализовать атомарное чтение / запись в логическом поле (postgresql)? Я понимаю, что есть 2 подхода к решению этой проблемы: 1) использовать счетчик и сделать обновление () 2) использовать атомарную операцию memcached

И 1, и 2 кажутся уродливыми взломщиками, в которых нет необходимости Какие-нибудь мысли и / или я упускаю что-то очевидное?

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2010

Не отправляйте уведомления мгновенно.Поставьте в очередь все уведомления и отправьте их, используя фоновый процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...