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

使用async关键字后FastAPI仍无法并行运行API的问题求助

解决FastAPI async接口阻塞并发请求的问题

核心原因

你给接口加了async关键字但仍串行执行,大概率是async路由里包含同步阻塞代码。FastAPI的async模式依赖单线程事件循环,一旦某个请求里有同步阻塞操作(比如time.sleep(4)、同步数据库查询、同步文件读取),整个事件循环会被占住,其他请求只能等它执行完才能处理。

具体解决方法

1. 把同步阻塞代码异步化包装

用asyncio.to_thread()将同步代码丢到线程池执行,避免阻塞事件循环:

import asyncio
from fastapi import FastAPI

app = FastAPI()

# 模拟同步阻塞操作
def slow_sync_task():
    import time
    time.sleep(4)
    return "处理完成"

@app.get("/slow-api")
async def slow_endpoint():
    # 异步执行同步任务
    result = await asyncio.to_thread(slow_sync_task)
    return {"data": result}

2. 改用同步路由+多线程Worker

如果接口以同步操作为主,没必要硬套async,直接用同步函数做路由,启动Uvicorn时指定多线程:

from fastapi import FastAPI
import time

app = FastAPI()

@app.get("/slow-api")
def slow_endpoint():
    time.sleep(4)
    return {"data": "处理完成"}

启动命令添加多线程参数(根据CPU核心数调整worker数量):

uvicorn main:app --reload --workers 4

3. 排除浏览器并发限制

Chrome对同一域名默认最多允许6个并发TCP连接,但你描述的是完全等待第一个请求完成才执行,这种情况概率较低。可以用Postman同时发送多个请求,或者换用其他浏览器测试,确认是否是浏览器层面的限制。

验证方式

用Postman同时发送2个请求到慢接口:

  • 若仍串行,说明代码里存在同步阻塞
  • 若能并行,说明是Chrome的连接限制问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:17:02