我有类似的东西:
newsletter = Newsletter.select_for_update().latest()
newsletter.started_sending = timezone.now()
newsletter.save()
newsletter.send()
然后它遇到了我发送重复的竞争条件,大概是因为send()被两个cron作业击中了。这导致我认为锁是在第一次保存时释放的,我认为它在视图结束之前不会释放。
它是在第一次保存时发布的,对吧?
答案 0 :(得分:10)
来自https://docs.djangoproject.com/en/dev/topics/db/transactions/#topics-db-transactions-requirements
Django的默认交易行为
Django的默认行为是使用open事务运行,当调用任何内置的数据更改模型函数时,它会自动提交。例如,如果调用model.save()或model.delete(),则会立即提交更改。