docker - 延迟 Gunicorn 直到 Flask 完全加载?

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

问题

我怎样才能延迟 Gunicorn 与监听端口的绑定(bind)?

我试过使用 app factory pattern 运行 Gunicorn以及更常见的方式,但没有任何作用。我目前正在延迟加载数据帧,这很有帮助,但我最多只能加载 2 秒。希望答案不会与优化我的应用加载有关,而是与如何阻止 Cloud Run 向容器传输流量有关,直到我准备好。

编辑

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

最佳答案

您可以使用 gunicorn 服务器 Hook 来定义 on_starting 和 on_exit。参见 https://github.com/benoitc/gunicorn/issues/2136获取信息。

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

https://stackoverflow.com/questions/61626727/

相关文章:

typescript - 在字符串值成员中使用枚举

reactjs - 类型 'typeof class' 不可分配给类型 'ComponentType

ios - 在 iOS 13 中获取 Root View Controller 的正确方法是什么?

visual-studio - visual studio 项目总是重建但 pdb 未更新

python - BeautifulSoup img src 获取 base64 而不是实际链接

html - 如何在没有 JavaScript 的情况下设置 CSS 动画速度?

python - 你如何使用 python-rtmidi 获取 midi 事件

python - 包含 json 格式列的 Dask 数据框

kubernetes - 无法从普罗米修斯适配器检索自定义指标

python - 逐步将新数据附加并绘制到 matplotlib 行