You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI async接口配置多worker仍串行处理请求问题排查

问题原因分析

1. Uvicorn配置冲突

你代码中启动Uvicorn时同时设置了reload=True和workers=2,这两个参数是互斥的:只要开启热重载(reload)功能,Uvicorn会强制仅启动1个工作进程,你配置的多worker参数会直接失效,服务实际运行时只有1个进程处理请求。

2. 浏览器请求排队限制

即便多worker配置生效,用同一个浏览器的两个标签页同时请求同一个接口,也会出现串行效果:主流浏览器(Chrome、Edge、Firefox等)默认会对同域名的相同请求做排队限制,避免重复资源占用,会等第一个请求返回后才会发起第二个请求,所以服务端收到的两个请求本身就是先后到达的,自然呈现串行处理的日志。

解决方法
  1. 调整Uvicorn启动配置,移除reload=True参数:
if __name__ == "__main__":
    uvicorn.run("fastapitest.main:app", host="0.0.0.0", port=8000, workers=2)

启动后可查看Uvicorn初始化日志,会输出两个工作进程的启动记录,代表多worker配置生效。

  1. 更换测试方式,避免浏览器的请求限制:
  • 打开两个终端窗口,同时执行curl http://localhost:8000/delayed
  • 用两个不同的浏览器(如Chrome+Edge)分别发起请求,或打开两个无痕浏览窗口分别访问

调整后即可看到两条Starting at日志几乎同时打印,符合并行处理的预期。

补充说明

异步接口的并行处理不需要依赖多worker,单进程下的asyncio事件循环也可以在await阻塞时切换处理其他请求。你哪怕只开1个worker,只要请求是同时到达服务端,也会出现并行执行的效果,多worker只是进一步利用多核CPU提升吞吐量而已。

内容的提问来源于stack exchange,提问作者Levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:51:00