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

AI开发-python-langchain框架(--EasyOCR图片文字提取 )访

本文能帮你解决什么1. 搞懂FastAPI异步async/await到底在什么场景下能真正提升性能。2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。3. 避开常见的坑比如阻塞操作、数据库连接池耗尽、GIL限制。4. 获得可直接复用的代码片段和配置建议。?? 主要内容脉络一、问题与背景为什么你的async可能“假生效”二、核心原理ASGI、async/await与多线程的关系三、实战演示I/O密集型 vs CPU密集型任务的正确处理姿势四、注意事项与进阶思考那些容易翻车的点一、问题与背景为什么你的async可能“假生效”很多人以为只要给FastAPI的路由函数加上async def就自动获得了高并发能力。其实不然。FastAPI基于ASGI异步服务器网关接口它确实允许异步处理请求。但异步不等于多线程更不等于性能无限提升。它的核心是“非阻塞”当一个请求在等待I/O比如查数据库、调外部API时事件循环Event Loop会去处理其他请求而不是干等着。这意味着如果你的async函数里干的是CPU密集型的活儿比如复杂的计算、图像处理那它依然会阻塞整个事件循环其他请求照样排队。官方文档虽然说了FastAPI支持异步但没明确告诉你异步的优势仅限于I/O密集型场景。 这是我用真金白银的线上故障换来的教训。二、核心原理ASGI、async/await与多线程的关系好咱们先来理清几个关键概念?? ASGIAsynchronous Server Gateway Interface这是FastAPI的底层协议。你可以把它想象成一个高效的餐厅调度系统。服务员事件循环负责接待顾客请求如果某位顾客点菜后需要等厨房做菜I/O等待服务员不会傻等而是先去接待其他顾客。厨房做好菜会通知服务员服务员再回来上菜。这样一个服务员就能同时照顾多桌客人。?? async/await这是Python的语法糖用来定义协程Coroutine。async def声明一个函数是“可暂停的”await表示“在这里可以暂停去干别的”。?? 多线程/多进程当你的任务主要是CPU密集型比如大量数学计算时异步帮不上忙。这时就需要请出多线程或多进程把计算任务分摊到多个CPU核心上去。FastAPI本身不直接管理线程但我们可以利用Python的concurrent.futures或asyncio.to_thread来实现。简单总结I/O密集型用asyncCPU密集型用多线程/多进程混合型任务两者结合。三、实战演示I/O密集型 vs CPU密集型任务的正确处理姿势接下来重点来了怎么在代码里落实场景1纯I/O密集型推荐使用async比如调用外部API、查询数据库。这是async的主场。import asynciofrom fastapi import FastAPIimport httpx # 异步HTTP客户端app FastAPI()app.get(/fetch-data)async def fetch_data():# 模拟并发调用三个外部APIasync with httpx.AsyncClient() as client:tasks [client.get(https://api.example.com/data1),client.get(https://api.example.com/data2),client.get(https://api.example.com/data3)]responses await asyncio.gather(*tasks)return {results: [r.json() for r in responses]}?? 这里千万别用同步的requests库否则会阻塞事件循环。务必使用httpx或aiohttp这种异步客户端。场景2CPU密集型必须用多线程/多进程比如图像处理、数据分析。这时候就得请出进程池。from fastapi import FastAPIfrom concurrent.futures import ProcessPoolExecutorimport timeimport osapp FastAPI()# 创建进程池工作进程数建议设为CPU核心数executor ProcessPoolExecutor(max_workersmin(32, os.cpu_count() or 1))def cpu_intensive_task(n: int):模拟CPU密集型任务比如图像处理time.sleep(n) # 这里用sleep模拟计算耗时return fTask {n} completedapp.get(/process-image)async def process_image():# 将阻塞函数提交到进程池避免阻塞事件循环future executor.submit(cpu_intensive_task, 2)result future.result()return {result: result}# 应用关闭时正确关闭进程池app.on_event(shutdown)def shutdown_event():executor.shutdown(waitTrue)?? 这里有个坑线程池大小max_workers不是越大越好。设置太大反而会增加上下文切换开销。一般建议设置为CPU核心数1。场景3混合型async 多线程实际项目中很多任务既涉及I/O又涉及计算。这时可以结合两者。import asynciofrom fastapi import FastAPIfrom concurrent.futures import ThreadPoolExecutorimport httpxapp FastAPI()executor ThreadPoolExecutor(max_workers4)async def fetch_url(client: httpx.AsyncClient, url: str):异步获取数据response await client.get(url)return response.json()def heavy_computation(data: dict):模拟CPU密集型计算time.sleep(1) # 模拟计算return {processed: data}app.get(/complex-task)async def complex_task():# 步骤1并发I/O异步async with httpx.AsyncClient() as client:data await fetch_url(client, https://api.example.com/data)# 步骤2CPU计算扔到线程池loop asyncio.get_event_loop()result await loop.run_in_executor(executor, heavy_computation, data)return result如果你用的是Python 3.9还可以用asyncio.to_thread让代码更简洁。四、注意事项与进阶思考那些容易翻车的点再说几个容易出问题的地方都是血泪史?? 阻塞操作绝对不能放在async函数里比如time.sleep()、同步的数据库驱动如psycopg2、同步的文件读写等。要用await asyncio.sleep()、异步驱动如asyncpg和aiofiles替代。?? 数据库连接池配置异步环境下数据库连接池的大小需要重新评估。我遇到过因为连接池太小高并发下所有请求都在等连接导致服务雪崩的情况。建议根据实际压力测试调整。?? GIL全局解释器锁限制Python的GIL会让多线程在纯CPU任务上效率打折。如果计算极其密集考虑用multiprocessing启动多进程但要注意进程间通信的成本。?? Uvicorn配置生产环境运行FastAPI通常用Uvicorn。建议设置--workers进程数为CPU核心数--loop uvloop使用更高效的事件循环。例如uvicorn main:app --workers 4 --loop uvloop --host 0.0.0.0 --port 8000?? 监控与日志异步环境下错误栈可能不那么直观。一定要打好日志尤其是耗时操作。可以用asyncio.create_task时附加错误回调避免任务静默失败。缓瓮颓骋

相关文章:

AI开发-python-langchain框架(--EasyOCR图片文字提取 )访

本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...

告别点灯实验:用STM32F407+HC-05打造你的第一个智能硬件原型(附手机控制源码)

从LED闪烁到智能控制:基于STM32F407与HC-05的蓝牙硬件开发实战 当你已经能够熟练地点亮STM32开发板上的LED灯时,是否想过如何让这个小实验变得更"智能"?在物联网技术日益普及的今天,将基础硬件控制与无线通信技术结合&a…...

【2026年最新600套毕设项目分享】校园水电费管理微信小程序(30004)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

快速入门:Ollama部署Yi-Coder-1.5B,5分钟搭建编程助手

快速入门:Ollama部署Yi-Coder-1.5B,5分钟搭建编程助手 1. 为什么选择Yi-Coder-1.5B? Yi-Coder-1.5B是一个轻量级但功能强大的开源代码生成模型,特别适合开发者日常使用。它最大的优势是在保持小体积(仅15亿参数&…...

Qwen3.5-9B-AWQ-4bit电路仿真辅助:Multisim设计文档自动生成

Qwen3.5-9B-AWQ-4bit电路仿真辅助:Multisim设计文档自动生成 1. 电子工程师的文档痛点 硬件设计工程师每天都要面对一个耗时又不得不做的工作——撰写电路设计文档。从电路原理说明到元器件清单,从测试步骤到注意事项,这些文档不仅要求专业…...

springboot+deepseek实现AI接口调用

deepseek注册流程就不复述了,需要的小伙伴可以留言,单独指导。需要调用deepseek大模型接口的来看看了,直接上代码DsControllerpackage com.example.demo.controller;import com.example.demo.service.DsService; import org.springframework.…...

OpenClaw+Qwen3.5-9B创作助手:从大纲到短视频脚本全自动

OpenClawQwen3.5-9B创作助手:从大纲到短视频脚本全自动 1. 为什么需要自动化创作流程 作为一个内容创作者,我经常面临这样的困境:明明有好的创意,却卡在执行环节。从构思大纲到完成短视频脚本,往往需要反复查阅资料、…...

乙巳马年春联生成终端保姆级教学:多模态输入(图片+文字)生成

乙巳马年春联生成终端保姆级教学:多模态输入(图片文字)生成 1. 引言:从灵感闪现到墨宝生成 每到岁末年初,为家里挑选或创作一副称心如意的春联,是许多人甜蜜的烦恼。既要寓意吉祥,又要对仗工整…...

基于Qt开发Lingbot-Depth-Pretrain-ViTL-14的跨平台桌面调试工具

基于Qt开发Lingbot-Depth-Pretrain-ViTL-14的跨平台桌面调试工具 深度估计模型,比如我们今天要聊的 Lingbot-Depth-Pretrain-ViTL-14,在机器人导航、三维重建、增强现实这些领域越来越重要。但说实话,对于开发者或者研究人员来说&#xff0c…...

YOLOv11与PP-DocLayoutV3对比:目标检测与文档版面分析的技术异同

YOLOv11与PP-DocLayoutV3对比:目标检测与文档版面分析的技术异同 最近在和朋友聊起计算机视觉项目时,发现一个挺有意思的现象。有人拿着一个号称“地表最强”的通用目标检测模型,信心满满地想去处理一份复杂的扫描版PDF,结果却碰…...

OFA图像描述新手入门:无需代码基础,快速搭建图像描述AI

OFA图像描述新手入门:无需代码基础,快速搭建图像描述AI 1. 什么是OFA图像描述系统? 想象一下,你拍了一张照片,系统能自动为你写出照片里有什么、发生了什么——这就是OFA图像描述系统能做的事情。这个AI工具特别适合…...

Phi-4-mini-reasoning企业级部署:Nginx反向代理+HTTPS安全访问配置教程

Phi-4-mini-reasoning企业级部署:Nginx反向代理HTTPS安全访问配置教程 1. 项目介绍 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这款模型主打"小参数、强推理、长上下文、低延迟…...

STM32+DHT11温湿度监测实战:从硬件接线到串口调试全流程(附避坑指南)

STM32DHT11温湿度监测实战:从硬件接线到串口调试全流程(附避坑指南) 在物联网和智能硬件快速发展的今天,环境监测已成为许多项目的基础需求。无论是智能家居中的温湿度调控,还是农业大棚中的环境监控,亦或是…...

AI净界RMBG-1.4使用技巧:让抠图效果更完美的几个小方法

AI净界RMBG-1.4使用技巧:让抠图效果更完美的几个小方法 1. 为什么抠图效果有时不够理想? 即使是目前最先进的RMBG-1.4模型,在某些特殊情况下也可能出现边缘不够完美的情况。这通常不是模型本身的问题,而是由于输入图片的特性导致…...

LFM2.5-1.2B-Thinking-GGUF嵌入式开发应用:STM32项目代码注释与文档生成

LFM2.5-1.2B-Thinking-GGUF嵌入式开发应用:STM32项目代码注释与文档生成 1. 引言:嵌入式开发的文档困境 在STM32等嵌入式开发项目中,我们经常面临一个尴尬的现实:代码写完了,但注释和文档却总是"待办事项"…...

Intv_AI_MK11模型部署精讲:Anaconda环境管理与依赖隔离

Intv_AI_MK11模型部署精讲:Anaconda环境管理与依赖隔离 1. 为什么需要环境隔离 在部署AI模型时,最让人头疼的问题之一就是依赖冲突。你可能遇到过这样的情况:昨天还能正常运行的代码,今天安装一个新包后就报错了;或者…...

通义千问1.5-1.8B-Chat-GPTQ-Int4一键部署效果展示:低显存占用下的流畅对话体验

通义千问1.5-1.8B-Chat-GPTQ-Int4一键部署效果展示:低显存占用下的流畅对话体验 最近在尝试各种轻量级大模型本地部署,一个绕不开的痛点就是显存。动不动就十几GB的显存需求,让很多只有一张普通消费级显卡的朋友望而却步。正好,我…...

探秘书匠策AI:毕业论文写作的“智慧锦囊”大公开!

在学术的广阔天地里,毕业论文如同一座巍峨的山峰,让无数攀登者既敬畏又向往。它不仅是对我们多年学习成果的检验,更是通往学术殿堂的必经之路。然而,面对这座山峰,许多人常常感到无从下手,甚至望而却步。别…...

别再傻傻分不清:DNS、RANS、LES到底该用FDM还是FVM来算?

湍流模拟方法选择指南:DNS、RANS、LES与FDM、FVM的实战搭配策略 在计算流体力学(CFD)的实际工程应用中,选择合适的湍流模型与数值方法是每个工程师都会面临的挑战。面对复杂的流体流动问题,如何在计算精度、资源消耗和…...

「码动四季·开源同行」go实战案例:如何使用 Prometheus 和 Grafana 监控预警服务集群?

监控和预警平台是互联网公司较为重要的后端架构组成之一,是整个运维乃至整个产品生命周期中最重要的一环,它能够事前及时预警发现故障,事后提供详实的数据用于追查定位问题。Prometheus和Grafana 相结合是开源服务监控和预警平台的主流方案之…...

以考促学、以练固基:一体化在线考试学习平台设计与实践

在数字化培训与考核普及的背景下,考试、学习、练习一体化已成为企事业单位、教育、政府、金融、电力等行业提升培训效率、规范考核流程的核心需求。传统模式下学习、练习、考试相互割裂,存在组织成本高、监管难度大、数据不互通、效果难追踪等问题&#…...

【成本管理】信息系统项目管理师论文范文

#信息系统项目管理师论文写作要求 信息系统项目管理师论文项目成本管理范文,范文仅供参考。...

使用GitHub Actions实现SDMatte模型的CI/CD自动化流水线

使用GitHub Actions实现SDMatte模型的CI/CD自动化流水线 1. 为什么需要自动化流水线 在机器学习项目开发中,团队经常面临这样的困境:每次代码更新后,需要手动运行测试、构建镜像、部署环境,这个过程不仅耗时耗力,还容…...

人脸识别OOD模型真实效果:会议直播截图中关键人物人脸的OOD分标注集

人脸识别OOD模型真实效果:会议直播截图中关键人物人脸的OOD分标注集 1. 引言:为什么需要人脸识别OOD模型? 在日常的人脸识别应用中,我们经常会遇到这样的问题:上传的图片质量参差不齐,有些图片模糊不清&a…...

MiniCPM-o-4.5-nvidia-FlagOS开发入门:C语言基础与系统编程概念问答

MiniCPM-o-4.5-nvidia-FlagOS开发入门:C语言基础与系统编程概念问答 1. 引言:你的随身C语言导师 刚开始学C语言,是不是感觉有点懵?指针、内存、结构体这些概念,看书看半天,好像懂了,一写代码又…...

Qwen1.5-1.8B GPTQ模型轻量化部署效果:低显存占用下的性能保持

Qwen1.5-1.8B GPTQ模型轻量化部署效果:低显存占用下的性能保持 最近在折腾大模型本地部署的朋友,可能都遇到过同一个头疼的问题:模型效果不错,但显存要求太高,自己的显卡根本跑不起来。动辄几十GB的显存需求&#xff…...

像素艺术创作指南:如何用像素时装锻造坊打造杂志级时装大片

像素艺术创作指南:如何用像素时装锻造坊打造杂志级时装大片 1. 像素艺术与时尚的完美结合 在数字艺术领域,像素风格正经历一场文艺复兴。从复古游戏到现代时尚杂志,这种独特的艺术形式正在重新定义视觉表达。像素时装锻造坊将这一趋势推向新…...

项目环境的搭建,项目的初步使用和deepseek的初步认识

1.环境搭建这个项目使用的是字节旗下的trae开发环境项目开始前首先得连接远程终端,要么是虚拟机要么是云服务器从远端克隆完头文件后再到本地来编译 编译完成后要将编译好的库文件以及头文件进行安装 安装到系统的根目录 这样以后用可以找到这样用到的头文件就拷贝…...

保姆级指南:Mac上如何一键部署GLM-4.6V-Flash-WEB,实现图片智能问答

保姆级指南:Mac上如何一键部署GLM-4.6V-Flash-WEB,实现图片智能问答 1. 为什么选择GLM-4.6V-Flash-WEB? 在当今AI技术快速发展的时代,能够"看懂"图片并回答问题的多模态模型变得越来越重要。GLM-4.6V-Flash-WEB是智谱…...

EasyAnimateV5图生视频实战:多图批量处理脚本开发(Python+requests API)

EasyAnimateV5图生视频实战:多图批量处理脚本开发(Pythonrequests API) 1. 项目背景与需求场景 在日常的内容创作和视频制作中,我们经常遇到这样的需求:需要将大量的静态图片转换为动态视频。无论是电商商品展示、社…...