我正在 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/
相关文章:
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 数据框