有没有办法在 django 中为 db 事务或通过 django 的 ORM 执行的 db 查询设置超时?
示例用例:
Heroku 将 django Web 请求限制为 30 秒,之后 Heroku 终止请求,不允许 django 优雅地回滚任何尚未返回的事务。这可能会使未完成的事务在 postgres 等数据库上保持打开状态。您可以在数据库中配置超时,但这也会限制非 Web 相关的查询,例如维护脚本分析等。在这种情况下,最好通过 django ( or via the middleware ) 设置超时。
最佳答案
是的,这是可能的。
对于 postgres 客户端,有一个名为 statement_timeout
的配置参数。 .好东西:它可以通过环境变量设置。
这意味着如果你设置 PGOPTIONS
至 --statement-timeout=28s
在此应用程序的 heroku 设置中,该语句将在 28 秒后失败。
请记住:此设置将用于所有 dyno 类型,而不仅仅是您的网络服务器。
如果你想解决这个问题,你可以将配置添加到你的 Procfile
(以python为例):
web: PGOPTIONS=--statement-timeout=28s waitress-serve myapp.wsgi:application
worker: PGOPTIONS= worker.py
然后只有来自您的网络服务器的连接才会有此语句超时。
关于django - 通过 Django 设置事务\查询超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963854/