Gunicorn 在使用 UvicornWorker 时不遵守超时

Gunicorn is not respecting timeout when using UvicornWorker

我正在设置超时检查,所以我创建了端点:

@app.get("/tc", status_code=200)
def timeout_check():
    time.sleep(500)
    return "NOT OK"

我正在使用 docker 图片 tiangolo/uvicorn-gunicorn-fastapi:python3.7 以及我对 运行 服务器的命令:

CMD ["gunicorn","--log-level","debug","--keep-alive","15", "--reload", "-b", "0.0.0.0:8080", "--timeout", "15", "--worker-class=uvicorn.workers.UvicornH11Worker", "--workers=10", "myapp.main:app"]

我预计端点会在 15 秒后失败,但事实并非如此。似乎超时没有得到遵守。有什么解决办法吗?

异步工作者与同步工作者的行为不同:

  • 在同步 worker 中, worker 将被阻止完成请求,因此如果请求花费的时间超过超时时间,worker 将被杀死,请求也会被杀死。
  • 在异步 worker 中, worker 不会被阻塞并保持响应以完成其他请求,即使请求需要很长时间。即工作超时和请求超时在这种情况下是不同的。

uvicorn 目前没有请求超时参数。

更多详情:https://github.com/benoitc/gunicorn/issues/1493