【问题标题】:set transaction\query timeout through django?通过 django 设置事务\查询超时?
【发布时间】:2013-11-13 20:38:59
【问题描述】:
有没有办法在 django 中为 db 事务或通过 django 的 ORM 执行的 db 查询设置超时?
示例用例:
Heroku 将 django web 请求限制为 30 秒,之后 Heroku 终止请求,不允许 django 优雅地回滚任何尚未返回的事务。这可能会使未完成的事务在 postgres 等数据库上处于打开状态。您可以在数据库中配置超时,但这也会限制与 Web 无关的查询,例如维护脚本分析等。在这种情况下,最好通过 django (or via the middleware) 设置超时。
【问题讨论】:
标签:
django
heroku
timeout
django-orm
【解决方案1】:
是的,这是可能的。
对于 postgres 客户端,有一个名为 statement_timeout 的配置参数。好东西:可以通过环境变量设置。
这意味着如果您在此应用的 heroku 设置中将 PGOPTIONS 设置为 --statement-timeout=28s,则该语句将在 28 秒后失败。
请记住:此设置将用于所有测功机类型,而不仅仅是您的网络服务器。
如果你想解决这个问题,你可以将配置添加到你的Procfile(以python为例):
web: PGOPTIONS=--statement-timeout=28s waitress-serve myapp.wsgi:application
worker: PGOPTIONS= worker.py
那么只有来自你的网络服务器的连接才会有这个语句超时。