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 目前没有请求超时参数。
我正在设置超时检查,所以我创建了端点:
@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 目前没有请求超时参数。