【问题标题】:Any way to extend request timeout limit?有什么办法可以延长请求超时限制?
【发布时间】:2014-11-25 21:32:49
【问题描述】:

我来了

[2] [CRITICAL] WORKER TIMEOUT at=error code=H12 desc="请求超时" 方法=POST dyno=web.1 连接=1ms 服务=30000ms

我正在使用

在 heroku 上启动一个烧瓶网络应用程序
web: gunicorn server:app --timeout 60 --worker-class gevent --log-file=-

--timeout 标志似乎与我使用同步还是 gevent 工作人员无关。有什么想法可以延长请求超时限制吗?

当然,我可能需要研究对如此长的进程的异步处理。

【问题讨论】:

    标签: python heroku flask


    【解决方案1】:

    正如an official Heroku discussion 上的回答(链接现已失效),我们不能将超时设置为大于 30 秒:

    Heroku 会终止所有耗时超过 30 秒的请求。没有办法 改变这种行为。


    您需要重新设计发送请求的方式,将呼叫拆分为多个更小的块。 Javascript是要走的路。

    【讨论】:

      【解决方案2】:

      这不是 Heroku 特有的,但一般来说增加超时是一个坏主意;这个想法是您应该尽快返回响应 - 对于任何可能需要超过几秒钟的时间,您应该接受请求,将其排队等待后台处理并返回响应,这样您的客户端就不会被阻塞。

      对于 Heroku,这意味着您必须启动一个工作进程。这与您已经拥有的 web dyno 不同,因为它被设计为在后台运行并且没有此类超时限制。

      要详细了解这种常见模式,请参阅excellent writeup at the devcenter,详细说明整个过程。

      特别是对于 Heroku 上的 Python,这是使用 redis queue 实现的。

      【讨论】:

      • 感谢您的详细回答。昨晚我挖出来也找到了rq和worker。只是想知道工作进程是否增加了使用成本。目前尚不清楚可能产生的成本影响
      • 另外,这是一个一次性的原型应用,所以我不太担心延迟和用户体验问题,但应用不需要在现场演示中死掉
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 2022-08-11
      • 2012-11-22
      • 2016-11-13
      • 1970-01-01
      相关资源
      最近更新 更多