我有两个同时运行的进程,这些进程运行单独的事务,最终到达相同的代码路径:
@transaction.atomic
def myFunc():
object = x.objects.get(filter=sample_filter) // Assume this gets a single row back
object.sample_property = "Hello World"
object.save()
其中一个进程在object.save()处继续报告等待ShareLock的死锁。我假设另一个没有报告,因为它是没有被杀死的那个。如果这些进程最终从X中选择了同一行,是否会导致死锁?我无法看到因为.get()没有锁定“对象”,是吗?
答案 0 :(得分:0)
我假设您使用的是PostgreSQL,默认情况下它处于READ-COMITTED隔离级别。所以,是的,在你的原子交易中,例如如果您在pdb
之后调用get()
,则其他没有pdb
的代码应该等到其他代码的事务到达save()
时完成。对于您的情况,不应该发生死锁。