如何处理Django PostgreSQL锁



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

我知道在"网络交易"中有一些悬而未决的问题。每次进行选择时,都会在postgresql中创建一个新锁。这种锁定在网络交互(请求-过程-响应)中很好

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

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驱动程序行为的一部分,没有显式设置自动提交。如果autocommit=True,则所有查询都在求值时开始和结束。

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

干杯

相关内容

  • 没有找到相关文章

最新更新