Concurrency gunicorn uvicorn worker.py如何遵守限制\u并发设置

Concurrency gunicorn uvicorn worker.py如何遵守限制\u并发设置,concurrency,gunicorn,fastapi,uvicorn,concurrency-limits,Concurrency,Gunicorn,Fastapi,Uvicorn,Concurrency Limits,FastAPI使用gunicorn启动uvicorn workers,如中所述 但是,gunicorn不允许使用自定义设置启动uvicorn,如中所述 该问题建议覆盖源文件中的config_kwargs,如 我们尝试过,但在源中的多个uvicorn文件中,uvicorn不遵守设置限制\u并发性: 如何强制乌维康遵守此设置?我们仍然收到来自FastAPI的503个错误 -------更新----------- gunicorn设置--worker connections 1000在发出分配给多

FastAPI使用gunicorn启动uvicorn workers,如中所述

但是,gunicorn不允许使用自定义设置启动uvicorn,如中所述

该问题建议覆盖源文件中的config_kwargs,如

我们尝试过,但在源中的多个uvicorn文件中,uvicorn不遵守设置
限制\u并发性

如何强制乌维康遵守此设置?我们仍然收到来自FastAPI的503个错误

-------更新----------- gunicorn设置--worker connections 1000在发出分配给多个worker的100个并行请求时仍会导致503

然而,我认为这是一个更复杂的问题:我们的API端点需要做大量繁重的工作,通常需要5秒钟才能完成

2芯2人压力测试:

  • A.100多个并发请求,端点负载沉重--工作连接1
  • B.100多个并发请求,端点负载沉重--工作连接1000
  • C.100多个并发请求,端点低负载--工作连接1
  • D.100多个并发请求,端点低负载--工作连接1000
两个实验A和B都产生了503个响应,因此假设worker connections设置确实起作用,那么过多的模拟连接似乎不会导致我们的503错误

我们对这种行为感到困惑,因为我们希望gunicorn/uvicorn将工作排队,而不会抛出503个错误。

来自

工作者连接

同时客户端的最大数目

来自

限制并发性

在发出HTTP 503响应之前,允许的最大并发连接数或任务数

根据此信息,两个设置变量执行相同的操作。所以

uvicorn --limit-concurrency 100 application:demo_app
现在将此
CustomUvicornWorker
gunicorn
命令一起使用

gunicorn -k path.to.custom_worker.CustomUvicornWorker application:demo_app
gunicorn-k path.to.custom\u worker.CustomUvicornWorker应用程序:演示\u应用程序

注意:您可以在
CustomUvicornWorker
类中检查
self.config.limit\u并发性
,以确保正确设置值。

谢谢!gunicorn——worker connections 1000没有任何影响,当我发出许多并行请求时,我仍然得到503。然而,我们的API端点需要很多繁重的工作负载,通常需要5秒钟才能完成。然而,我们必须做压力测试,看看如果100个客户同时提出这个要求会发生什么。我不知道为什么会发生这种情况,但是,你可以尝试三种解决方案。第一、第二以及第一和第二的组合。是的,我不确定503是否是由于并发连接或其他资源过载造成的。我还将尝试CustomUvicornWorker方法并对其进行测试
uvicorn --limit-concurrency 100 application:demo_app
gunicorn --worker-connections 100 -k uvicorn.workers.UvicornWorker application:demo_app
from uvicorn.workers import UvicornWorker


class CustomUvicornWorker(UvicornWorker):
    CONFIG_KWARGS = {
        "loop": "uvloop",
        "http": "httptools",
        "limit_concurrency": 100
    }
gunicorn -k path.to.custom_worker.CustomUvicornWorker application:demo_app