什么清除Django中select_for_update创建的锁?

boa*_*der 11 django

如果我执行select_for_update,该锁何时/如何释放?一些示例代码:

for rec_id in list(1,2,3):
    record = MyModel.objects.select_for_update().get(pk=rec_id)
    # Do several things to this record
    record.save()
Run Code Online (Sandbox Code Playgroud)

save()在视图返回并且整个事务完成后,是否释放了锁,或者它是否被释放?如何控制锁的粒度?

文档似乎没有说:https: //docs.djangoproject.com/en/1.6/ref/models/querysets/#select-for-update

Kev*_*nry 11

锁在交易期间处于活动状态,由您控制.所以,你通过控制交易的粒度控制锁的粒度,用通常的方法:@transaction.atomic,with transaction.atomic(),ATOMIC_REQUESTS = True等请参阅交易文件.