Django PostgreSQL多处理死锁
我正在运行一个Django应用程序,它计算并存储一个表在另一个表中的一组统计信息,同时保持两个表之间的M2M链接。为了生成stats表,我建立了一个多处理系统,该系统查询表1中的所有内容并将其加载到表2中。但是,当我同时在多个处理器上运行查询时,会出现死锁错误(即使启用自动提交) 我的统计表如下所示:Django PostgreSQL多处理死锁,django,postgresql,django-models,multiprocessing,Django,Postgresql,Django Models,Multiprocessing,我正在运行一个Django应用程序,它计算并存储一个表在另一个表中的一组统计信息,同时保持两个表之间的M2M链接。为了生成stats表,我建立了一个多处理系统,该系统查询表1中的所有内容并将其加载到表2中。但是,当我同时在多个处理器上运行查询时,会出现死锁错误(即使启用自动提交) 我的统计表如下所示: class Stats(models.Model): score = models.IntegerField(...) objects_from_table_1 = models.
class Stats(models.Model):
score = models.IntegerField(...)
objects_from_table_1 = models.ManyToManyField('table_1', related_name='stats', ...)
我的解析代码如下所示(同时发生在许多单独的进程中,这些进程都有自己的数据库连接)
我在尝试保存对象时出现死锁错误。我相信现在发生的是一个锁,因为多个进程试图同时向同一个stat_obj添加一个table1_对象,这会造成死锁
是否有某种方法可以让系统等待锁自行解析或重新构造解析代码,以避免出现死锁
提前感谢。在玩了一段时间之后,我们决定只保存stat_obj的输入,然后稍后运行stat_obj列表——这样,每个stat_obj在任何给定时间都只会被一个线程修改
for table1_object in table1_objects:
for stat_obj in stat_objs:
stat_obj.objects_from_table_1.add(table1_object)
stat_obj.save()