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