我在使用postgresql后端的Django项目时遇到了问题。
我知道在“网络交易”中存在一些未解决的问题。每次执行select时,都会在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)
提前谢谢你,
答案 0 :(得分:1)
似乎这是Django的一部分 - 驱动程序行为,没有明确设置自动提交。使用autocommit = True,所有查询在评估时开始和结束。
我知道在查询+更新方面它并不安全,但大部分时间,查询只是...查询
干杯