有人知道如何在Django中读/写原子布尔菲尔德吗?我正在尝试执行以下操作:
我在名为email_sent的模型中有一个字段。每当我从我们的支付处理器收到即时付款通知(IPN)时,我想发送通知电子邮件。由于我收到多个通知,并且我只想发送1个收据电子邮件,我(现在)只需使用模型中的支票,无论是否已收到收据电子邮件。然而,有时我会为同一个用户同时获得多个IPN。我不想发送多封电子邮件,但以下代码引入了竞争条件:
if purchase.email_sent:
self.send_email()
purchase.email_sent = True
purchase.save()
这显然不是正确的方法,但是如何在布尔字段(postgresql)上实现原子读/写?我意识到有两种方法可以解决这个问题: 1)使用计数器并进行更新() 2)使用原子memcached操作
1和2都是丑陋的黑客,不应该是必要的。有什么想法和/或我错过了一些明显的东西吗?
谢谢!
答案 0 :(得分:0)
不要立即发送通知。将所有通知排队并使用后台进程发送。