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

news/2026/1/9 13:34:46/文章来源:https://www.cnblogs.com/XY-Heruo/p/19448294

前言

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

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

方法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.mzph.cn/news/1119148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复杂项目迭代不踩坑,MonkeyCode 沉浸式开发让 AI 研发可控可追溯

当前AI编程工具百花齐放,但多数仅能实现“编写代码、运行Demo”的基础功能,难以匹配真实工程研发的复杂场景。长亭科技全新推出的AI开发平台MonkeyCode,成功打破这一行业瓶颈——它以企业级研发视角构建,让AI深度参…

深度学习毕设选题推荐:基于python深度学习识别水果的成熟度卷神经网络

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

科研 PPT 还在 “复制粘贴”?虎贲等考 AI:10 分钟生成期刊级演示文稿,逻辑颜值双封神

学术科研场景中,PPT 是成果传递的核心载体 —— 开题答辩要靠它展现研究价值,学术汇报要凭它打动听众,毕业答辩要借它赢得认可。但多数科研人都陷入过 PPT 制作的 “低效怪圈”:用模板套内容却逻辑混乱,手动排版却格式…

中转平台终极测评:poloai.top 凭什么成为开发者首选? - poloapi-ai大模型

随着 AI 大模型在编程、设计、科研等领域的深度渗透,第三方中转平台已成为国内开发者解锁 Claude、GPT、Gemini 等顶尖模型的核心渠道。但市面上各类中转平台良莠不齐,有的存在支付繁琐、稳定性差的问题,有的暗藏隐…

2026年企业知识库私有化部署厂商选型指南:安全与效率双驱动的落地路径 - 品牌2026

2026年,企业数字化转型进入深水区,知识管理的安全性与高效性成为核心诉求,知识库私有化部署凭借“数据不出域、自主可控”的核心优势,成为金融、医疗、政务等高合规行业的刚需选择。据《智能驱动增长:人工智能客户…

问卷设计 “传统派 VS AI 派” 终极对决!虎贲等考 AI:让调研效率与质量双向碾压

做学术调研、市场分析、教学评估,问卷设计是绕不开的关键环节。有人坚守 “传统人工设计”,坚信 “逐字打磨才够精准”,却在逻辑漏洞、表述歧义中反复内耗;有人拥抱 “普通 AI 设计”,期待 “高效产出”,却…

2026标书查重最强工具,快来为你的标书穿上“防弹衣” - 资讯焦点

2026标书查重最强工具,快来为你的标书穿上“防弹衣” 2026年开年,一份来自四川的招投标新规,像一颗投入湖面的石子,在整 个建筑圈激起了千层浪。文件中一句看似不起眼的话——“ 可将滥用人工智能软件编制冗长无序…

2026最新三轮车花鼓企业top5推荐榜!优质生产厂家及服务商解析/选择指南 - 全局中转站

引言 随着绿色出行理念普及与骑行运动专业化发展,三轮车花鼓作为传动系统核心部件,其性能稳定性、传动效率与轻量化水平直接决定骑行体验。据中国自行车协会2025年度行业报告显示,国内三轮车花鼓市场合规产品占比仅…

面积的定义应该突出数学本质

如果问你什么是面积,你会怎么回答? "物体表面或封闭图形的大小就是它们的面积。"这个概念是不是感觉特别熟悉?教科书上是这么写的,我们也一直是这么教孩子们的。并没有感觉有什么不妥。 今天读了张奠宙老师的《深入浅…

配音培训机构排名2025年度配音培训机构十强榜出炉 - 资讯焦点

第三方教育评估机构今日发布2025中国配音培训行业白皮书,综合师资实力、课程完课率、学员接单量与消费投诉率四项核心指标,评选出年度十大配音培训机构。湖南知声教育、喜马拉雅喜播教育、729声工场学院分列前三,成…

将电子书文本转换为盲文格式,生成可打印的盲文文档,供视障用户阅读。

电子书转盲文转换器一、实际应用场景与痛点应用场景视障学生小李需要阅读教材和课外书籍。虽然市面上有少量盲文书籍,但种类有限、价格昂贵、更新缓慢。当前的数字阅读器如读屏软件虽然能朗读文本,但无法替代盲文的触觉阅读体验。盲文具有独特的优势&…

真香警告!上下文工程才是AI开发未来,RAG已死?大模型开发者必看!

RAG已死,上下文工程永存:从炼金术到工程学 当所有人都在为百万级上下文窗口欢呼时,一个残酷的现实被揭开:你塞给模型的信息越多,它反而变得越笨。 你有没有觉得,我们现在开发AI应用特别像在搞一场神秘的炼金…

深度学习计算机毕设之基于python深度学习的餐桌美食识别卷神经网络

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

AI城市管理综合执法系统:让城市治理有“智”更有“度”

传统城管执法常陷“人海战术”困境:人工巡查效率低、夜间漏检多、跨部门协同慢。而AI城市管理综合执法系统,用“技术慧眼智能大脑”重构治理逻辑,把被动响应变成主动预判,让执法既精准又有温度,这背后是多重技术的协同…

高通推出Dragonwing Q-7790 和 Q-8750 处理器,工业及嵌入式物联网布局已成型

2026年1月5日,拉斯维加斯——在国际消费电子展(CES)上,高通技术公司今日宣布其物联网产品组合进一步扩展,其中包括全新的高通跃龙™Q系列处理器。在过去18个月中,通过对Augentix、Arduino、Edge Impulse、F…

2026最新自行车花鼓/三轮车差速器企业首选推荐HOVERIC泓瑞凯:专注中高端领域,HOVERIC泓瑞凯实力领航 - 全局中转站

在自行车运动蓬勃发展与绿色出行理念深入人心的当下,花鼓作为自行车传动系统的核心部件,其性能直接关系到骑行体验与安全。2026年,在竞争激烈的中高端自行车配件市场,HOVERIC泓瑞凯(简称“泓瑞凯”)凭借其深厚的…

课程论文 “速通” 指南!虎贲等考 AI 让学术输出又快又稳

每到期末,课程论文总能成为大学生的 “甜蜜负担”:通识课要兼顾广度,专业课要凸显深度,有的需实证数据支撑,有的要理论框架扎实, deadline 逼近却还在选题迷茫、文献堆砌、格式纠结中内耗。虎贲等考 AI 科研…

《3万字+512GPU!Hugging Face这本“AI修炼秘籍“让小白秒变分布式训练高手,附4000次实验数据+可视化图解》

在人工智能快速发展的今天,Hugging Face近日发布的《超大规模实战手册》可谓是一项颠覆性进展。 这本手册耗时 6 个月完成,字数达到3万字,在多达 512 个 GPU 上进行了超过 4000 次的 scaling 实验。内容涵盖了从基础原理到实际操作的方方面面…

超越CRUD:在2026年AI重塑的行业里,程序员如何抢占新赛道与高价值生态位?

2025年,AI大模型的影响力已渗透到软件开发的每一个角落,它不再是停留在概念层面的技术,而是实实在在地改写着行业规则——不仅传统CRUD(创建、读取、更新、删除)开发模式正被快速取代,更在悄然重构数十万程…

JAVA基础语法与Spring笔记

JAVA基础语法 JAVA参考教程文档(这里)。 是解释型的语言(.java文件 javac->.class文件 解释器->JVM虚拟机),GO是编译型的,PHP是解释型的。 JAVA变量有枚举类型,PHP8 才开始支持枚举…