首页 > 解决方案 > 使用 UvicornWorker 时 Gunicorn 不遵守超时

问题描述

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

@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 秒后失败,但事实并非如此。似乎超时不受尊重。有什么解决办法吗?

标签: pythongunicornfastapiuvicorn

解决方案


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

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

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

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


推荐阅读