django - 通过 Django 设置事务\查询超时?

标签 django heroku timeout django-orm

有没有办法在 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/

相关文章:

jquery - super 困难的 addClass 延迟函数 w/diff 定时间隔

c# - 购物车超时

python - 如何在 Web 服务器中设置 Python?

ruby-on-rails - 在 Heroku、PostgreSQL 和 Rails 5 上运行迁移时出错

heroku:正在运行连接到终端的控制台...

javascript - 为什么我在 MERN 部署到 Heroku 期间错误地收到丢失文件错误?

python - 如何设置 raw_input 的时间限制

python - 当情况并非如此时,Pylint-django 会引发有关 Django 未配置的错误(VSCode)

python - Django 在 GROUP BY 后获取 Max 的 ID

django-autocomplete-light django 1.8 自定义管理模型