为什么django会在mysql中留下锁?

Chr*_*vey 8 mysql django innodb

我有一个Django应用程序,它使用MySQL和InnoDB引擎进行存储.出于某种原因,即使在查询完成之后,Django有时也会保留锁定.(我可以用Innotop看到它们).

我在代码中执行的唯一事务处理是我为某些save()方法指定了django.db.transaction.commit_on_success,我正在使用多表继承.

如果我重新启动Apache服务器,锁就会消失.

有没有人见过这样的东西?我可以用一些会引起这种情况的反模式吗?

Gab*_*ley 1

我唯一一次成功做到这一点是通过在 Django 中设置与请求/视图无关的“计划”任务。默认的自动提交事务处理系统仅在请求/响应对完成并将其发送回最终用户时提交事务,因此创建在不发送请求的情况下运行的 kron 式作业会绕过该机制。

否则通常很难让它无法释放锁。您确定没有非常长时间运行的代码块(可能依赖于超时或类似的外部服务)将事情捆绑起来?