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



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

@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(( 没有在"对象"上放置锁定,是吗?

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

最新更新