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

分钟Mac本地跑通B wen!免费GPT-o替代,还能分钟造个会开浏览器+执行Shell的AI Agent

本文能帮你解决什么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 []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_ur# 步骤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时附加错误回调避免任务静默失败。陆镁劫帘

相关文章:

分钟Mac本地跑通B wen!免费GPT-o替代,还能分钟造个会开浏览器+执行Shell的AI Agent

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

3个核心功能+5步实战:PvZ Toolkit让你重新定义植物大战僵尸体验

3个核心功能5步实战:PvZ Toolkit让你重新定义植物大战僵尸体验 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 有没有想过,在植物大战僵尸这个经典游戏中,你不再…...

别再死记硬背了!用Python+Matplotlib动态可视化逻辑函数转换(真值表/卡诺图/波形图一键生成)

用Python动态可视化逻辑函数:从真值表到波形图的一站式解决方案 数字电路课程中那些抽象的逻辑函数概念,是否曾让你在深夜对着课本抓狂?当我第一次接触卡诺图时,那些密密麻麻的方格和看似随机的填1操作简直像天书。直到发现用Pyth…...

思源宋体CN终极指南:7种免费商用字体快速上手技巧

思源宋体CN终极指南:7种免费商用字体快速上手技巧 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目中文字体选择而烦恼吗?😟 担心字体…...

Skillpilot:一键集成AI编码技能,提升开发效率与代码安全

1. 项目概述:一键唤醒AI编码副驾驶 如果你和我一样,每天都在和Cursor、Claude Code、Windsurf这些新一代的AI编码工具打交道,那你肯定也遇到过这个痛点:面对一个具体的开发任务,比如“给我的Next.js项目加个用户认证”…...

PlantUML甘特图进阶玩法:自定义样式、关联JIRA任务、嵌入Confluence,打造可视化项目管理中心

PlantUML甘特图企业级实战:从可视化工具到项目管理中枢的蜕变之路 当团队规模超过20人、项目周期跨越季度时,静态的甘特图已经无法满足协作需求。上周我为一个跨国团队调试PlantUML工作流时发现,他们虽然每天更新JIRA任务,却要手动…...

NCM文件解密工具全面解析:轻松转换网易云音乐加密格式

NCM文件解密工具全面解析:轻松转换网易云音乐加密格式 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM文件无法在其他播放器使用而烦恼吗?ncmdump是一款实用的NCM文件解密工具&…...

告别依赖地狱:Win H + WSL CentOS 搭建 Synopsys EDA 工具链实践

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全…...

如何设计一个扛住千万级流量的系统?

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...

从‘消费者-订单’到‘汽车-驾驶员’:用Mermaid erDiagram讲好你的业务模型故事

业务模型可视化的艺术:用ER图讲好你的领域故事 在数字化转型的浪潮中,清晰表达业务逻辑的能力已成为技术团队的核心竞争力。我曾参与过一个汽车共享平台的项目,当开发团队用"用户-订单"这样的通用术语讨论时,业务方频频…...

三步搞定百度文库付费文档:终极免费获取纯净PDF指南

三步搞定百度文库付费文档:终极免费获取纯净PDF指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 你是否经常在百度文库上找到心仪的文档,却发现需要付费或积分才能完整查…...

手把手教你:在Windows上用Node.js本地跑起DrawDB,并一键穿透到公网(保姆级避坑指南)

手把手教你:在Windows上用Node.js本地跑起DrawDB,并一键穿透到公网(保姆级避坑指南) 最近在GitHub上发现了一个颜值与实力并存的数据库设计工具——DrawDB。作为一个长期与数据库打交道的开发者,我立刻被它简洁的界面和…...

别墅装修工期到底多长算正常?一份给业主的项目排期对照表

有个事挺反直觉的:越大的房子,工期越不能催。前段时间在一个业主群里看到有人问“300平的联排,装修公司说至少要10个月,是不是在拖我时间”,底下回复五花八门,有人说“我家180平装了6个月就入住了”&#x…...

终极修复方案:QrazyBox如何拯救你的损坏二维码

终极修复方案:QrazyBox如何拯救你的损坏二维码 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 想象一下,你精心准备的会议签到二维码因为打印质量问题变得模糊不清&…...

别再手动查颜色代码了!用Python+Pandas 5分钟自动生成你的专属颜色对照表

用PythonPandas打造智能颜色管理工具:从数据清洗到自动化查询 设计师和开发者在处理颜色代码时,常常陷入重复查找的困境——在CSS样式表、数据可视化图表或UI设计中频繁切换于各种颜色表示法之间。传统的手工查询不仅效率低下,还容易出错。其…...

iMeta短视频 | 最全可视化韦恩图和集合图工具EVenn使用手册

通讯点击蓝字 关注我们最全可视化集合工具EVenn使用手册iMeta主页:http://www.imeta.science研究论文● 期刊: iMeta (IF 33.2,中科院双一区TOP)● 原文链接DOI: https://doi.org/10.1002/imt2.184● 2024年4月11日,中国中医科学院陈同、黄璐…...

逆向分析ELF文件?用IDA远程调试Kali Linux,这份保姆级配置清单请收好(含linux_server64详解)

逆向工程实战:用IDA Pro远程调试Kali Linux的完整指南 当你面对一个Linux ELF可执行文件需要动态分析时,本地Windows环境往往无能为力。本文将带你搭建一套高效的远程调试环境,使用IDA Pro连接Kali Linux虚拟机,实现对ELF程序的深…...

Coze 怎么接入 GPT API?3 种方案实测,最后一种 5 分钟搞定

上个月有个朋友找我帮忙,他在 Coze 上搭了一套客服 Bot,用的是平台自带的模型,效果一般。他想换成 GPT-5.5 来跑,但折腾了两天没搞定——Coze 的插件配置界面改了好几版,网上的教程大部分还是 2024 年的截图&#xff0…...

保姆级教程:手把手教你用STM32F103自制一个带串口调试的STM32程序下载/复位控制板

从零打造STM32下载调试器:硬件设计到固件开发的完整实战指南 在嵌入式开发中,频繁地手动按压复位和BOOT按钮进行程序下载调试,不仅效率低下,还容易因操作失误导致芯片进入错误状态。本文将带你用STM32F103打造一款智能下载调试器&…...

如何用文本轻松绘制专业图表:Mermaid图表工具的完整指南

如何用文本轻松绘制专业图表:Mermaid图表工具的完整指南 【免费下载链接】mermaid Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid 你…...

机器学习模型诊断:学习曲线的原理与应用

1. 学习曲线:机器学习模型性能诊断的利器第一次训练机器学习模型时,我盯着90%的训练准确率沾沾自喜,直到测试集上惨不忍睹的30%准确率给了我一记耳光。这种过拟合问题困扰了我整整两周,直到导师扔给我一句:"画个学…...

报名实操篇(07)——报名后做什么?备考启动清单(人工智能训练师三级)

报名后做什么?备考启动清单(人工智能训练师三级)恭喜,报名完成了。 但很多人在这一步就进入了"等待模式"——等考试,等培训,等通知……结果考前两周才临时抱佛脚,要么考砸&#xff0c…...

终极解决方案:如何彻底解决Steam下载后电脑空转的能源浪费

终极解决方案:如何彻底解决Steam下载后电脑空转的能源浪费 【免费下载链接】SteamShutdown Automatic shutdown after Steam download(s) has finished. 项目地址: https://gitcode.com/gh_mirrors/st/SteamShutdown 还在为Steam下载完成后电脑整夜运行而烦恼…...

Wayback Machine浏览器扩展:你的终极网页存档解决方案

Wayback Machine浏览器扩展:你的终极网页存档解决方案 【免费下载链接】wayback-machine-webextension A web browser extension for Chrome, Firefox, Edge, and Safari 14. 项目地址: https://gitcode.com/gh_mirrors/wa/wayback-machine-webextension Way…...

GIS数据处理避坑指南:字段别名混乱?教你用ArcGIS Pro属性映射工具5分钟搞定

GIS数据规范化实战:5分钟解决字段别名混乱的行业难题 打开电脑看到同事发来的十几个图层文件,每个字段别名要么是乱码、要么干脆空白——这种场景对GIS从业者来说再熟悉不过了。不同部门、不同系统导出的数据,字段命名规则千差万别&#xff0…...

从“路怒症”到“老司机”:在SUMO里用四种变道模型,模拟真实城市交通博弈

从“路怒症”到“老司机”:在SUMO里用四种变道模型模拟城市交通博弈 环岛入口处五辆车同时减速,最外侧车道的卡车突然打转向灯,后方三辆轿车同时做出不同反应:一辆急刹让行,一辆加速抢道,另一辆则微妙地调…...

Navicat无限试用终极指南:Mac用户必备的免费重置方案

Navicat无限试用终极指南:Mac用户必备的免费重置方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navic…...

AI 学习笔记:Agent 的能力体系

Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

HTML中使用Canvas动态图形渲染:解锁Web交互新维度

在Web开发领域&#xff0c;动态图形渲染是构建沉浸式用户体验的核心技术之一。HTML5的<canvas>元素凭借其强大的JavaScript API&#xff0c;为开发者提供了在浏览器中直接操作像素的底层能力。从实时数据可视化到交互式动画&#xff0c;Canvas正在重新定义Web应用的视觉表…...

告别WPS保存报错:一份给Python开发者的pywin32与WPS兼容性配置清单

深度解析Python与WPS交互&#xff1a;pywin32兼容性配置全指南 当Python开发者尝试通过pywin32库与WPS进行自动化交互时&#xff0c;经常会遇到各种COM组件错误。这些错误往往源于复杂的版本依赖、系统权限配置和软件设置问题。本文将系统性地梳理pywin32与WPS的兼容性问题&…...