python - 使用 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 秒后失败,但事实并非如此。似乎超时不受尊重。有什么解决办法吗?
解决方案
异步工作者的行为与同步工作者不同:
- 在同步工作人员中,工作人员将被阻止完成请求,因此如果请求时间超过超时时间,工作人员将被杀死,请求也将被杀死。
- 在异步工作人员中,工作人员不会被阻止并且即使请求需要很长时间也会保持响应以完成其他请求。即在这种情况下,工作超时和请求超时是不同的。
uvicorn 目前没有请求超时参数。
推荐阅读
- amazon-web-services - 我的子域不适用于 Route53
- r - 通过 Rscript 运行脚本时使用活动 rsession
- continuous-integration - TeamCity 上的笑话测试
- php - 在 PHP 嵌套循环中渲染项目
- java - 在服务中获取 PathVariables、RequestParams、RequestBody
- javascript - Google App Scripts - 每次保存时都不会更新上次修改日期
- c# - 如何关闭 C++ REST Sdk websocket?
- entity-framework-core - 使用实体框架核心拥有集合关系的拥有实体
- django - Powershell中的bash导出命令
- java - Android Studio SharedPreferences 和内部存储不起作用