8

私は次のようなものを持っています:

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

newsletter.send()

その後、おそらく send() が 2 つの 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 に答える