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

python aiohttp

### 聊聊 Python 的 aiohttp一个写异步 HTTP 的家伙作为 Python 开发者平常写网络请求最头疼的是啥等 响应 的时候程序卡在那儿啥也干不了。十年前大部分人会甩一句“用 gevent 啊”或者“开线程池”。但现在回头看看aiohttp 成了很多人方案里的主角。它不是新鲜玩意儿2014 年左右就有了但直到 Python 3.5 正式支持 async/await 语法后它才真正变得顺手。1它到底是什么aiohttp 就是一组用来处理 HTTP 的异步工具库。说简单点它同时保留了两个身份一个是可以写异步客户端的库另一个是能跑异步服务端的框架。比如你用 requests 写过爬虫那 aiohttp 的客户端版就是它的异步替代品。如果你用过 Flask 或者 FastAPIaiohttp 的服务端能力相当于一个轻量级的替代品。有个细节值得注意——很多人以为它只能发请求其实它能同时做服务端。比如你平时写的一个小工具需要对外提供一个 RESTful 接口同时又需要不间断拉取别的服务的数据这时候 aiohttp 就特别合适因为一个事件循环里就能跑两套逻辑不用开两个进程来回传数据。2它能做什么简单列举几个典型场景写高并发爬虫。一个简单的例子就是爬取几百个网页。用 requests 写开几十个线程内存容易爆管理也麻烦。用 aiohttp一个协程搞定线程数基本不变但请求并发数能调到上千。很多数据采集工具底层的 HTTP 请求就是封装了 aiohttp。写异步 API 网关或代理。比如需要将外部 API 的数据透传给前端同时做缓存、限流、合并请求aiohttp 的服务端模式就特别顺手。国内不少大厂的中台化网关一些核心路由层用的就是 aiohttp。写 WebSocket 推送服务。aiohttp 原生支持 WebSocket长链接管理非常简单。像一些即时聊天组件、实时数据看板、交易推送轻量级的场景用它就够了撑个几千链接问题不大。做微服务内部通信。尤其是基于 HTTP/2 的跨服务调用aiohttp 也算顺手。虽然现在很多人转投 gRPC但 aiohttp 的侵入性更小搭个小服务几十行代码搞定非常适合尝试新想法。3怎么使用大多数人刚接触 aiohttp 时会先看到一长串的异步代码感觉和 requests 差别很大。实际上核心只有一个所有涉及 I/O 的操作发送、接收、连接建立都需要用 await。客户端用法以拉取一个典型的 JSON API 为例importaiohttpimportasyncioasyncdeffetch_data(url):asyncwithaiohttp.ClientSession()assession:asyncwithsession.get(url)asresp:returnawaitresp.json()asyncdefmain():urlhttps://api.github.com/users/octocatdataawaitfetch_data(url)print(data[login])asyncio.run(main())这段代码看起来简单其实藏了一个细节aiohttp.ClientSession 是需要复用的。每次请求都创建一个新 session会导致每次都要重新建立 SSL 握手和连接池效率就没了。服务端用法比如写一个小接口处理 JSONfromaiohttpimportwebasyncdefhandle_user(request):user_idrequest.match_info.get(id)# 假设这里去数据库查returnweb.json_response({user_id:user_id})appweb.Application()app.router.add_get(/user/{id},handle_user)web.run_app(app,host127.0.0.1,port8080)这里的 app 对象和 Flask 和 FastAPI 的 app 类似但底层基于 asyncio路由匹配、请求解析、响应序列化都跑在同一个事件循环里。4最佳实践说了这么多我踩过的坑帮各位整理几处。连接池大小要主动设。aiohttp 的 ClientSession 默认连接池上限是 100并发多的话很容易耗尽。经验值是单机高并发时开到 300-500但别无限量增大否则本机连接数和内存会扛不住。合理做法在创建 session 时传入connector aiohttp.TCPConnector(limit500)。给 session 加超时控制。aiohttp 默认不设总请求超时。遇到个别响应慢的 API 会把整个爬虫拖垮。建议给ClientTimeout(total30)统一设一个软超时出现超时了平滑重试。小心异常处理。aiohttp 的异常体系比 requests 复杂点。客户端模式常见的异常有aiohttp.ClientConnectorError连不上服务器、asyncio.TimeoutError超时、aiohttp.ClientResponseError状态码异常。建议在每个重要请求外层加try/except捕获。避免在循环中重复创建 session。很多人第一次写 aiohttp 代码时会把async with ClientSession()放在每一个请求里面。但这会导致每个请求都重新创建连接池严重降低效率。正确做法是全局一个 session或者一个 session 对象复用一段时间后销毁重开。服务端模式下尽量用中间件解耦。比如日志打印、请求验证、限流都可以通过web.middleware装饰器加在 app 上而不是在每个处理函数里重复写。5和同类技术对比在实际选型时经常有人会拿 aiohttp 和几个东西对比。对比 requests concurrent.futures。后者属于传统阻塞式 I/O 加线程池。优点是理解和迁移成本低适合只处理几十个并发的小脚本。一旦并发超过上千线程切换开销明显而且 Python 的 GIL 在线程池场景下依然会带来一定限制。相反 aiohttp 本身就是单线程非阻塞大量长连接场景下内存和调度开销都更低。对比 httpx。httpx 是最近几年兴起的库既支持同步也支持异步而且 API 设计更接近 requests学习曲线平滑。不过它的异步底层底层依赖 httpcore而 aiohttp 完全基于 asyncio 和 C 扩展底层由 uvloop/cython 加速。实测下来httpx 在高并发场景下性能和 aiohttp 差距不大但资源占用上 httpx 比 aiohttp 高一点尤其连接数一上去内存增长更快。所以超大规模爬虫、网关这类场景aiohttp 仍有一席之地。对比 FastAPI。FastAPI 作为服务端框架它的底层是 Starlette也是基于 asyncio而 Starlette 又依赖uvicorn等 ASGI 服务器。aiohttp 则直接自带 web 服务器基于asyncio的底层 I/O。如果只是想写一个小型代理或工具类服务aiohttp 的起步更快不用折腾 uvicorn/gunicorn。但 FastAPI 的优势在于自动生成 API 文档和数据校验Pydantic适合写复杂的企业级应用。对比 gRPC。如果谈的是跨语言、跨服务的高性能 RPC 通信gRPC 在序列化效率和协议定义方面都比 aiohttp 更专业。但 aiohttp 胜在 HTTP 生态兼容和后端接起来不需要定义 proto 文件参数用 JSON 传递对前端和测试更友好。大部分内部工具选 aiohttp 比 gRPC 快得多代价小。最后说句心里话aiohttp 是一种“学一点就能干很多”的库。但千万别试图用它做所有事比如跑大流量文件上传、长连接消息队列还是得配合其他组件。关键是在 I/O 密集型场景下它能给你省下不少服务器和开发成本。希望这些内容能帮各位在写下一个异步项目时心里更有数。

相关文章:

python aiohttp

### 聊聊 Python 的 aiohttp:一个写异步 HTTP 的家伙 作为 Python 开发者,平常写网络请求,最头疼的是啥?等 响应 的时候,程序卡在那儿,啥也干不了。十年前,大部分人会甩一句“用 gevent 啊”&am…...

从Bose到恒玄:ANC芯片发展简史与国产化如何让降噪耳机‘白菜价’

从Bose到恒玄:ANC芯片技术演进与消费电子平民化革命 1989年,当Bose推出首款商用主动降噪耳机时,这款定价近千美元的产品仅出现在飞行员驾驶舱和高端商务人士的旅行包中。三十年后,中国消费者已经可以在电商平台用不到200元人民币购…...

FLUX.1-Krea开源大模型:开发者可复现——种子值与生成结果强关联

FLUX.1-Krea开源大模型:开发者可复现——种子值与生成结果强关联 1. FLUX.1-Krea-Extracted-LoRA 真实感图像生成模型v1.0 FLUX.1-Krea-Extracted-LoRA 是一个专为真实感图像生成设计的开源模型,它通过独特的LoRA风格权重注入技术,显著提升…...

每日安全情报报告 · 2026-04-25

每日安全情报报告 2026-04-25 发布时间:2026-04-25 12:53 CST 情报周期:2026-04-24 ~ 2026-04-25 风险概览:🔴 高危漏洞 5 项 | 🟠 在野利用 4 项 | 🟡 PoC 公开 2 项 | 📰 安全事件…...

6大维度深度剖析:Jar Analyzer如何重构Java代码审计体验

6大维度深度剖析:Jar Analyzer如何重构Java代码审计体验 【免费下载链接】jar-analyzer Jar Analyzer - 一个 JAR 包 GUI 分析工具,方法调用关系搜索,方法调用链 DFS 算法分析,模拟 JVM 的污点分析验证 DFS 结果,字符串…...

7.css部署指南:从开发到生产的完整工作流程

7.css部署指南:从开发到生产的完整工作流程 【免费下载链接】7.css A JS-independent, tree-shakeable CSS framework for building faithful recreations of the Windows 7 UI. 项目地址: https://gitcode.com/gh_mirrors/7c/7.css 7.css是一个独立于JavaSc…...

MacBook电池终极保养指南:如何用AlDente延长电池寿命3倍

MacBook电池终极保养指南:如何用AlDente延长电池寿命3倍 【免费下载链接】AlDente-Battery_Care_and_Monitoring Menubar Tool to set Charge Limits and Prolong Battery Lifespan 项目地址: https://gitcode.com/gh_mirrors/al/AlDente-Battery_Care_and_Monito…...

如何用UnityFigmaBridge实现设计开发高效协作的完整解决方案

如何用UnityFigmaBridge实现设计开发高效协作的完整解决方案 【免费下载链接】UnityFigmaBridge Easily bring your Figma Documents, Components, Assets and Prototypes to Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityFigmaBridge UnityFigmaBridge是一…...

别再用相关性分析了!用Python的sklearn随机森林搞定环境因子与生物的非线性关联

用随机森林破解环境因子与生物指标的复杂关联:Python实战指南 当你在环境科学或生态学研究中遇到一堆温度、pH值、污染物浓度等环境因子数据,以及对应的生物指标测量结果时,传统的皮尔逊相关分析往往显得力不从心。这些方法只能捕捉线性关系&…...

LiquidAI LFM2-2.6B-GGUF部署教程:无GPU环境纯CPU推理性能实测(vs Qwen2-1.5B)

LiquidAI LFM2-2.6B-GGUF部署教程:无GPU环境纯CPU推理性能实测(vs Qwen2-1.5B) 1. 模型简介 LFM2-2.6B-GGUF是由Liquid AI公司开发的大语言模型,经过GGUF量化后特别适合在资源受限的设备上运行。这个2.6B参数的模型在保持良好性…...

从‘板子坏了’到成功出图:一个ESP32-CAM小白的真实排错心路与代码配置详解

从‘板子坏了’到成功出图:一个ESP32-CAM小白的真实排错心路与代码配置详解 第一次点亮ESP32-CAM开发板时,我盯着屏幕上不断滚动的红色报错信息,手指无意识地敲打着桌面。作为物联网专业的学生,我本以为按照教程一步步操作就能轻松…...

5分钟精通MDCx Docker容器化部署:从零到生产环境的最佳实践

5分钟精通MDCx Docker容器化部署:从零到生产环境的最佳实践 【免费下载链接】mdcx-docker 在Docker容器中运行 MDCX,并通过Web界面或远程桌面进行控制。Run MDCX in a Docker container, accessible and controllable via a web interface or remote de…...

快速入门@pmndrs/racing-game:10分钟搭建你的第一个React 3D赛车游戏

快速入门pmndrs/racing-game:10分钟搭建你的第一个React 3D赛车游戏 【免费下载链接】racing-game 🏎 Open source racing game developed by everyone willing 项目地址: https://gitcode.com/gh_mirrors/ra/racing-game pmndrs/racing-game是一…...

【实战指南】龙芯2K1000开发板:从零到一,快速上手全功能测试

1. 龙芯2K1000开发板开箱与硬件组装 第一次拿到迅为iTOP龙芯2K1000开发板时,包装盒里整齐排列的配件让我这个嵌入式老手也眼前一亮。作为国产处理器的代表作,这块开发板确实在硬件配置上下了功夫。我们先来清点标配配件:12V电源适配器、232串…...

2026最新!3款亲测实用会议纪要录音转文字神器,免费好用到哭效率提升10倍!

刚开完3小时项目会,散会老板甩一句“今天纪要下班前给我”。翻笔记漏了一半核心需求,对着录音拖进度条逐句听,一下耗到深夜。采访完嘉宾,1小时录音整理要花3小时,本来接活赚的钱全赔在时间上。上课记笔记,只…...

KrkrzExtract技术解析:krkrz引擎资源解包解决方案架构与实践

KrkrzExtract技术解析:krkrz引擎资源解包解决方案架构与实践 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract是一款专为krkrz游戏引擎设计的资源解包工具&#x…...

ChatGPT Images 2.0 功能大提升,但测试中仍出现这些错误!

1. ZDNET 的关键观点是什么? ChatGPT Images 2.0 能生成准确的文本和可用的图形,还能匹配包括 ZDNET 视觉风格在内的品牌样式,但仍会出现错误,需要人工审核。本周早些时候,OpenAI 推出了其全新的图像生成引擎 ChatGPT …...

rtop编译与安装指南:从源码到可执行文件的完整流程

rtop编译与安装指南:从源码到可执行文件的完整流程 【免费下载链接】rtop rtop is an interactive, remote system monitoring tool based on SSH 项目地址: https://gitcode.com/gh_mirrors/rt/rtop rtop是一款基于SSH的交互式远程系统监控工具,…...

MATLAB翼型分析终极指南:用XFOILinterface快速完成气动性能计算

MATLAB翼型分析终极指南:用XFOILinterface快速完成气动性能计算 【免费下载链接】XFOILinterface 项目地址: https://gitcode.com/gh_mirrors/xf/XFOILinterface 在航空航天工程和流体力学研究中,翼型气动性能分析是一个基础而关键的任务。传统上…...

3步掌握AudioSep音频分离:用自然语言精准提取任何声音

3步掌握AudioSep音频分离:用自然语言精准提取任何声音 【免费下载链接】AudioSep Official implementation of "Separate Anything You Describe" 项目地址: https://gitcode.com/gh_mirrors/au/AudioSep AudioSep是一款革命性的音频分离工具&…...

Speechless:免费Chrome插件帮你永久保存微博记忆的终极方案

Speechless:免费Chrome插件帮你永久保存微博记忆的终极方案 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 你是否曾经担心过&#xff0c…...

告别复杂后期!用OpenVINO AI插件让Audacity一键分离人声与伴奏 [特殊字符]

告别复杂后期!用OpenVINO AI插件让Audacity一键分离人声与伴奏 🎵 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plu…...

Jadx日志级别参数终极指南:从崩溃到从容的Android反编译体验优化

Jadx日志级别参数终极指南:从崩溃到从容的Android反编译体验优化 【免费下载链接】jadx Dex to Java decompiler 项目地址: https://gitcode.com/gh_mirrors/ja/jadx Jadx作为一款强大的Dex to Java反编译工具,在Android应用逆向工程中扮演着重要…...

手把手教你从微软商店和手动下载两种方式安装WSL,并彻底卸载清理旧版本(避坑指南)

深度掌控WSL:从多路径安装到彻底清理的完整指南 在Windows系统上运行原生Linux环境的需求日益增长,无论是开发者需要搭建一致的开发环境,还是运维人员希望在不切换系统的情况下管理Linux服务器,Windows Subsystem for Linux&…...

Phi-mini-MoE-instruct开源模型价值:非商业/商业双许可,支持私有化定制与白标交付

Phi-mini-MoE-instruct开源模型价值:非商业/商业双许可,支持私有化定制与白标交付 1. 模型概述与核心价值 Phi-mini-MoE-instruct是一款轻量级混合专家(MoE)指令型小语言模型,采用创新的双许可模式,同时支…...

Path of Building终极指南:5分钟掌握流放之路最强离线构建工具

Path of Building终极指南:5分钟掌握流放之路最强离线构建工具 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building(简称PoB&#xf…...

Pixel-Composer:零代码像素艺术特效创作,3步打造专业视觉魔法

Pixel-Composer:零代码像素艺术特效创作,3步打造专业视觉魔法 【免费下载链接】Pixel-Composer Node base VFX editor for pixel art. 项目地址: https://gitcode.com/gh_mirrors/pi/Pixel-Composer 你是否曾为游戏角色设计酷炫的技能特效而绞尽脑…...

从零到一:基于 Vitepress 与 GitHub Actions 打造自动化技术文档站

1. 为什么选择Vitepress搭建技术文档站 第一次接触Vitepress是在2021年Vue 3刚发布不久,当时需要为团队搭建一个轻量级的技术文档平台。相比传统的VuePress,Vitepress基于Vite构建,启动速度提升了近10倍,这让我眼前一亮。经过两年…...

揭秘AlphaPlayer:如何用40KB SDK实现高性能透明视频动画的终极解决方案

揭秘AlphaPlayer:如何用40KB SDK实现高性能透明视频动画的终极解决方案 【免费下载链接】AlphaPlayer AlphaPlayer is a video animation engine. 项目地址: https://gitcode.com/gh_mirrors/al/alphaplayer AlphaPlayer是字节跳动直播中台推出的一款革命性视…...

如何快速掌握AliceSoft游戏资源处理:完整Alice-Tools实战指南

如何快速掌握AliceSoft游戏资源处理:完整Alice-Tools实战指南 【免费下载链接】alice-tools Tools for extracting/editing files from AliceSoft games. 项目地址: https://gitcode.com/gh_mirrors/al/alice-tools 你是否曾梦想修改自己喜爱的AliceSoft游戏…...