【问题标题】:Delay Gunicorn until Flask is fully loaded?延迟 Gunicorn 直到 Flask 完全加载?
【发布时间】:2020-08-20 21:58:36
【问题描述】:

我正在 Google Cloud Run 上使用 Gunicorn 部署 Flask API。我遇到的问题是我的应用程序必须加载两个大型 Pandas 数据帧(这是不可协商的),这需要几秒钟。我遇到的问题是,只要$PORT 正在侦听,Cloud Run 就会开始向容器发送流量,这意味着前几个请求会排队,直到 Flask 准备好。我尝试使用 Docker 的运行状况检查来确保容器状态在 Flask 准备就绪之前不正常,但 Cloud Run 忽略了这一点。

问题

如何延迟 Gunicorn 与监听端口的绑定?

我尝试使用app factory pattern 以及更常见的方式运行 Gunicorn,但没有任何效果。我目前正在延迟加载数据帧,这有帮助,但我能做的最好的事情是 2 秒。希望答案不会与优化我的应用程序的加载有关,而是如何防止 Cloud Run 在我准备好之前将流量传送到容器。

编辑

使用 --preload 标志似乎可以解决问题,只是 Cloud Run 仍然在容器准备好之前将流量驱动到容器。

【问题讨论】:

  • 如果不是延迟绑定,而是让应用程序中的流量,并且,当数据帧加载时,它返回一个 5xx 错误,所以客户端必须重试?如果不是,请求队列有什么问题?
  • Heroku 也存在这个问题。

标签: docker flask gunicorn serverless google-cloud-run


【解决方案1】:

您可以使用 gunicorn 服务器挂钩来定义 on_starting 和 on_exit。有关信息,请参阅https://github.com/benoitc/gunicorn/issues/2136

或者,简单地使用 --config 拥有一个配置文件并从那里进行导入会导致您的模块运行(模块中的初始化代码),这对您来说可能就足够了。

【讨论】:

  • 那么,不是非常熟悉on_starting,应该使用什么确切的配置来阻止 Gunicorn 在加载 Flask 应用程序之前监听端口?
猜你喜欢
  • 1970-01-01
  • 2018-06-06
  • 2016-02-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多