【发布时间】:2021-11-01 05:14:36
【问题描述】:
我已将 FastAPI ML 服务部署到 Google App Engine,但它表现出一些奇怪的行为。 FastAPI 服务旨在接收来自主服务的请求(通过 Cloud Tasks),然后发回响应。这确实发生了。但处理这些请求的 FastAPI 服务中的路由似乎被调用了四次而不是一次。
我的假设是 GAE、gunicorn 或 FastAPI 将确保处理程序在每个云任务中运行一次。但似乎多个工作人员或我的配置中的其他问题导致处理程序被调用四次。以下是更多细节和一些具体问题:
- Fast API 应用通过
gcloud app deploy app.yaml部署到 Google App Engine (flex) -
app.yaml文件包括GUNICORN_ARGS: "--graceful-timeout 3540 --timeout 3600 -k gevent -c gunicorn.gcloud.conf.py main:app" - FastAPI 项目根目录(用于 gcloud 部署)中的
Dockerfile还包括最终命令gunicorn -c gunicorn.gcloud.conf.py main:app
这是gunicorn conf:
bind = ":" + os.environ["PORT"]
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "uvicorn.workers.UvicornWorker"
forwarded_allow_ips = "*"
max_requests = 1000
max_requests_jitter = 100
timeout = 200
graceful_timeout = 6000
所以我很困惑:
- Dockerfile 中的
app.yaml或gunicorn参数中的GUNICORN_ARGS是否优先? - 我应该使用多个工作人员还是这正是导致多个任务的原因?
很高兴提供任何其他相关信息。
【问题讨论】:
标签: google-app-engine gunicorn fastapi uvicorn google-cloud-tasks