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