【问题标题】:How to handle Django-PostgreSQL Locks如何处理 Django-PostgreSQL 锁
【发布时间】:2014-10-15 10:36:05
【问题描述】:

我有一个带有 postgresql 后端的 Django 项目的问题。

我知道“网络交易”中存在一些未解决的问题。每次我进行选择时,都会在 postgresql 中创建一个新锁。该锁定在 Web 交互中很好(请求 - 过程 - 响应)

似乎是一个问题,我在 celery 集成方面遇到了一些问题。我有一些任务需要很长时间才能执行,它们如下所示:

l1. instances = mymodels.MyModel.objects.all()
l2. for instance in instances:
l3.     do something with that instance (not update, just performing 
l4.     some operations from instance fields)

只有在任务结束时才会释放锁。有什么办法可以在“l1”之后释放生成的锁?

我的 postgres 锁定表的输出

SELECT locktype, relation::regclass, mode, transactionid AS tid,
virtualtransaction AS vtid, pid, granted
FROM pg_catalog.pg_locks l LEFT JOIN pg_catalog.pg_database db
ON db.oid = l.database WHERE (db.datname = 'sandbox' OR db.datname IS NULL)
AND NOT pid = pg_backend_pid();


  locktype  | relation |     mode      | tid | vtid  |  pid  | granted 
------------+----------+---------------+-----+-------+-------+---------
 virtualxid |          | ExclusiveLock |     | 3/427 | 47715 | t
(1 row)

提前谢谢你,

【问题讨论】:

    标签: django postgresql locking celery


    【解决方案1】:

    似乎这是 Django - 驱动程序行为的一部分,没有明确设置自动提交。使用 autocommit = True,所有查询都在其评估时刻开始和结束。

    我知道查询+更新是不安全的,但大多数时候,查询只是……查询

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-11
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多