我有一个Django应用程序,它使用MySQL和InnoDB引擎进行存储。出于某种原因,即使在查询完成之后,Django有时也会保留锁定。 (我可以用Innotop看到它们。)
我在代码中执行的唯一事务处理是我为某些save()方法指定了django.db.transaction.commit_on_success,我正在使用多表继承。
如果我重新启动Apache服务器,锁就会消失。
有没有人见过这样的东西?我可以用一些反模式写出来吗?
答案 0 :(得分:1)
我唯一能够实现这一目标的方法是在Django中设置与请求/视图无关的“计划”任务。默认的自动提交事务处理系统仅在完成请求/响应对并将其发送回最终用户时提交事务,因此创建在没有发送请求的情况下运行的kron-esque作业将绕过该机制。
否则通常很难让它无法释放锁定。您确定没有非常长时间运行的代码块(可能依赖于超时或类似的外部服务)将事情搞砸了吗?