我有一个视图需要对涉及需要锁定的共享资源的数据库执行更新(实现很复杂,但本质上只是一个共享计数器)。
为了保护自己免受竞争条件的影响,我使用的代码大致如下:
@transaction.commit_manually
def do_it(request):
affected_models = Something.objects.select_for_update(blah = 1)
for model in affected_models:
model.modify()
model.save()
transaction.commit()
这是commit_manually
,select_for_update()
的用法save()
吗?我怎样才能写一个测试来证实这一点?例如,我找不到 Django 在事务之间触发的信号;我不能只是运行它并希望出现并发问题并得到处理。