当前位置: 首页 > news >正文

FastAPI异步方法中调用同步方法

前言

在异步方法中调用同步方法,会直接阻塞整个事件循环,导致应用在执行同步方法期间无法处理其他任何并发请求,从而拖垮整个服务的性能。

为了解决这个问题,核心思路是将同步方法交给外部线程池去执行。

方法1, 使用 to_thread

Python 3.9 后可以使用 asyncio.to_thread 方法,将同步函数跑在独立的线程中,并返回一个协程供 await

import asyncio
import time
from fastapi import FastAPIapp = FastAPI()def sync_task(name: str):time.sleep(2) return f"Hello {name}, sync task done!"@app.get("/async-call")
async def async_endpoint():result = await asyncio.to_thread(sync_task, "World")return {"message": result}

方法2, 直接定义同步路由

FastAPI支持定义同步路由,FastAPI会自动在一个外部线程池中运行该函数。不过出于代码整体设计的考虑,个人不建议这么做。

方法3, 使用 run_in_threadpool

FastAPI 基于 Starlette, 而 Starlette 提供一个工具函数 run_in_threadpool,这种方式类似于 asyncio.to_thread,在某些老版本的 FastAPI 或特定的 contextvars 传递场景下更常用。

from fastapi.concurrency import run_in_threadpool@app.get("/method3")
async def starlette_endpoint():result = await run_in_threadpool(sync_task, "Starlette")return {"message": result}

方法4, 使用进程池

对于CPU密集型任务,应该使用多进程ProcessPoolExecutor来操作

import concurrent.futures
import math
from fastapi import FastAPIapp = FastAPI()
# 创建一个全局进程池
executor = concurrent.futures.ProcessPoolExecutor()def cpu_intensive_calculation(n: int):# 模拟重度 CPU 计算return sum(math.isqrt(i) for i in range(n))@app.get("/cpu-bound-task")
async def cpu_task():loop = asyncio.get_running_loop()result = await loop.run_in_executor(executor, cpu_intensive_calculation, 10**7)return {"result": result}
http://www.jsqmd.com/news/205804/

相关文章:

  • 复杂项目迭代不踩坑,MonkeyCode 沉浸式开发让 AI 研发可控可追溯
  • 科研 PPT 还在 “复制粘贴”?虎贲等考 AI:10 分钟生成期刊级演示文稿,逻辑颜值双封神
  • 2026年企业知识库私有化部署厂商选型指南:安全与效率双驱动的落地路径 - 品牌2026
  • 中转平台终极测评:poloai.top 凭什么成为开发者首选? - poloapi-ai大模型
  • 问卷设计 “传统派 VS AI 派” 终极对决!虎贲等考 AI:让调研效率与质量双向碾压
  • 2026标书查重最强工具,快来为你的标书穿上“防弹衣” - 资讯焦点
  • 2026最新三轮车花鼓企业top5推荐榜!优质生产厂家及服务商解析/选择指南 - 全局中转站
  • 面积的定义应该突出数学本质
  • 配音培训机构排名2025年度配音培训机构十强榜出炉 - 资讯焦点
  • 真香警告!上下文工程才是AI开发未来,RAG已死?大模型开发者必看!
  • 将电子书文本转换为盲文格式,生成可打印的盲文文档,供视障用户阅读。
  • 深度学习计算机毕设之基于python深度学习的餐桌美食识别卷神经网络
  • AI城市管理综合执法系统:让城市治理有“智”更有“度”
  • 高通推出Dragonwing Q-7790 和 Q-8750 处理器,工业及嵌入式物联网布局已成型
  • 2026最新自行车花鼓/三轮车差速器企业首选推荐HOVERIC泓瑞凯:专注中高端领域,HOVERIC泓瑞凯实力领航 - 全局中转站
  • 课程论文 “速通” 指南!虎贲等考 AI 让学术输出又快又稳
  • JAVA基础语法与Spring笔记
  • 超越CRUD:在2026年AI重塑的行业里,程序员如何抢占新赛道与高价值生态位?
  • 《3万字+512GPU!Hugging Face这本“AI修炼秘籍“让小白秒变分布式训练高手,附4000次实验数据+可视化图解》
  • 【保姆级教程】从“陪聊“到“打工“,Google教你构建自己的AI智能体,代码示例全在这!
  • PPO过时了?GRPO/DAPO/GSPO/SAPO四大算法全面对比,揭秘最新强化学习技术趋势!
  • 强脑科技的核心硬件模组为何选择蓝思量产?
  • 全网最全专科生AI论文网站TOP9:开题报告文献综述必备
  • Claude Code之父Boris提出的 9 条 Claude Code 实战技巧
  • 震惊!AI已悄悄内化为你的编程伙伴,小白开发者必知的5大生存法则
  • 懒人福音!2025年Agent工具大盘点,小白程序员也能秒变AI大神!
  • CSDN资源等级如何提升?综合贡献分如何提高?
  • 楼宇运维线路管理标准:保障ICT设施与服务稳定性的核心支撑
  • 电子器件烧毁的底层逻辑与避坑指南
  • 2026上海留学中介实力大比拼,十大靠谱机构引领留学新程 - 留学机构评审官