这会导致django + postgres陷入僵局吗?

时间:2017-03-21 03:53:32

标签: django postgresql

我有两个同时运行的进程,这些进程运行单独的事务,最终到达相同的代码路径:

@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()没有锁定“对象”,是吗?

1 个答案:

答案 0 :(得分:0)

我假设您使用的是PostgreSQL,默认情况下它处于READ-COMITTED隔离级别。所以,是的,在你的原子交易中,例如如果您在pdb之后调用get(),则其他没有pdb的代码应该等到其他代码的事务到达save()时完成。对于您的情况,不应该发生死锁。