3

有没有办法在 django 中为 db 事务或通过 django 的 ORM 执行的 db 查询设置超时?

一个示例用例:
Heroku 将 django Web 请求限制为 30 秒,之后 Heroku 终止请求,不允许 django 优雅地回滚任何尚未返回的事务。这可能会使未完成的事务在 postgres 等数据库上处于打开状态。您可以在数据库中配置超时,但这也会限制与 Web 无关的查询,例如维护脚本分析等。在这种情况下,最好通过 django(或通过中间件)设置超时。

4

1 回答 1

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 

然后只有来自您的网络服务器的连接才会有此语句超时。

于 2019-12-01T14:39:14.670 回答