8

我有类似的东西:

newsletter = Newsletter.select_for_update().latest()
newsletter.started_sending = timezone.now()
newsletter.save()

newsletter.send()

然后它遇到了我发送重复的竞争条件,大概是因为 send() 被两个 cron 作业击中。这让我认为锁在第一次保存时被释放,因为我认为它直到视图结束才会释放。

第一次存档就放出来了吧?

4

1 回答 1

10

来自https://docs.djangoproject.com/en/dev/topics/db/transactions/#topics-db-transactions-requirements

Django 的默认事务行为

Django 的默认行为是使用打开的事务运行,当调用任何内置的数据更改模型函数时,它会自动提交该事务。例如,如果您调用 model.save() 或 model.delete(),更改将立即提交。

于 2012-08-29T08:11:32.813 回答