讲师中心 微信公众号
AI工具推荐 视频效率加速

Python async 程序为什么变慢问题解析

秋婷吖_9467

秋婷吖_9467

发布时间:2026-02-26 17:45:01

|

280人浏览过

|

来源于php中文网

原创

Python async程序变慢主因是“假异步”:混用同步阻塞操作(如time.sleep、requests)、协程串行执行、CPU密集任务阻塞事件循环、资源超发。应改用async对应方案、并发调度、线程池卸载及限流控制。

python async 程序为什么变慢问题解析

Python async 程序变慢,通常不是因为 async 本身有问题,而是异步代码被“假异步”或“阻塞式写法”拖累了——表面上用了 async/await,实际仍串行执行、频繁阻塞事件循环,或误用同步库。

混用同步阻塞操作,卡死事件循环

async 函数里直接调用 time.sleep()、requests.get()、文件读写(open().read())等同步阻塞操作,会暂停整个事件循环,让其他协程无法调度。哪怕只有一处,就可能让并发优势归零。

  • ✅ 正确做法:用 asyncio.sleep() 替代 time.sleep()
  • ✅ HTTP 请求换为 aiohttp 或 httpx.AsyncClient
  • ✅ 文件 I/O 用 aiopath 或 asyncio.to_thread()(Python 3.9+)包裹同步操作

协程未真正并发执行

常见错误是用 await 逐个等待协程,例如:

await fetch_user(1)<br>await fetch_user(2)<br>await fetch_user(3)

361SCAN security check your skill python scripts
361SCAN security check your skill python scripts

扫描并分析已安装技能,用于查看指定技能目录的名称、描述和详情,或列出所有已安装的技能。

下载

立即学习“Python免费学习笔记(深入)”;

这本质是串行,和同步没区别。要并发,必须先创建任务,再统一 await:

  • ✅ 用 asyncio.gather(f1(), f2(), f3()) 并发启动所有协程
  • ✅ 或显式创建任务:task1 = asyncio.create_task(f1()),再 await asyncio.gather(task1, task2, task3)

事件循环被 CPU 密集型任务霸占

async 不解决 CPU 瓶颈。如果协程里做大量计算(如解析大 JSON、加密、图像处理),会持续占用线程,导致事件循环无法切换。

  • ✅ 将 CPU 密集工作移出事件循环:用 loop.run_in_executor() 或 asyncio.to_thread() 丢给线程池
  • ✅ 极端情况考虑多进程(multiprocessing),但需权衡 IPC 开销

过度创建协程或连接,触发资源瓶颈

比如用 gather 同时发起 1000 个 HTTP 请求,可能耗尽本地端口、触发服务端限流、或压垮 DNS 解析器。

  • ✅ 加连接池限制(aiohttp.TCPConnector(limit=100))
  • ✅ 用 asyncio.Semaphore 控制并发数,例如最多同时 10 个请求
  • ✅ 避免在循环内无节制创建新协程,注意生命周期和资源释放(如 session 复用)

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2135

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3282

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1096

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3759

2025.09.10

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1906

2025.08.19

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4218

2023.08.10

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn