【问题标题】:Django PostgreSQL Deadlocks with MultiprocessingDjango PostgreSQL 多处理死锁
【发布时间】:2014-07-16 17:28:44
【问题描述】:

我正在运行一个 Django 应用程序,该应用程序计算并在另一个表中存储有关一个表的一堆统计信息,同时保持两者之间的 M2M 链接。为了生成统计表,我设置了一个多处理系统,它查询表 1 中的所有内容并将其加载到表 2 中。但是,当我同时在多个处理器上运行查询时,我会遇到死锁错误(即使我打开自动提交)。

我的统计表如下所示:

class Stats(models.Model):
    score = models.IntegerField(...)
    objects_from_table_1 = models.ManyToManyField('table_1', related_name='stats', ...)

我的解析代码如下所示(同时发生在许多独立的进程中,这些进程都有自己的数据库连接)

for table1_object in table1_objects:
    for stat_obj in stat_objs:
        stat_obj.objects_from_table_1.add(table1_object)
        stat_obj.save()

当我尝试保存对象时出现死锁错误。我相信发生的事情是有一个锁,因为多个进程试图同时将一个 table1_object 添加到同一个 stat_obj 中,这会造成死锁。

有没有什么方法可以让系统等待锁自行解决或重新构造我的解析代码,以免发生这种死锁?

提前致谢。

【问题讨论】:

    标签: django postgresql django-models multiprocessing


    【解决方案1】:

    在玩了一段时间之后,我们决定简单地保存应该为 stat_obj 输入的内容,然后稍后运行一个 stat_obj 列表——这样,每个 stat_obj 只会被一个线程修改在任何给定时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多