讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

Python 异步编程常见陷阱总结

阿雪姑娘_1436

阿雪姑娘_1436

发布时间:2026-02-25 19:48:02

|

435人浏览过

|

来源于php中文网

原创

最常见的错误是直接调用async def定义的协程而不await或run,导致逻辑不执行;其次是在协程中使用阻塞I/O、错误并发(未用gather)、忽视事件循环生命周期。

python 异步编程常见陷阱总结

混淆同步函数和异步函数调用

最常见的错误是把 async def 定义的协程对象直接当成普通函数调用,比如写成 my_coro() 却没用 await 或 asyncio.run()。这样只会返回一个协程对象,不会真正执行逻辑,也不会报错,容易让人误以为代码“没反应”或“跳过了”。

正确做法:

  • 在 async 函数内部,用 await my_coro()
  • 在 普通函数或脚本顶层,用 asyncio.run(my_coro())
  • 避免对协程对象做 print(my_coro()) 这类操作——它只打印 <coroutine object ...></coroutine>,毫无意义

在异步上下文中调用阻塞式 I/O 操作

比如在 async def 函数里直接使用 time.sleep(2)、requests.get() 或文件读写(open().read()),会阻塞整个事件循环,让其他协程无法运行,彻底失去异步优势。

应对方式:

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

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 用 await asyncio.sleep(2) 替代 time.sleep(2)
  • 用 aiohttp、httpx.AsyncClient 替代 requests
  • 文件操作可用 aiopath 或 asyncio.to_thread()(Python 3.9+)包装阻塞调用

错误地并发多个协程(忘了 await 或 gather)

想并行发起 10 个网络请求,却写成:

tasks = [fetch(url) for url in urls]<br>results = [await t for t in tasks]  # 串行执行!

这实际是逐个 await,等同于同步。真正并发需要先创建任务,再统一等待:

  • 用 asyncio.create_task() 显式调度,再 await 所有任务
  • 更常用的是 await asyncio.gather(*tasks),简洁且自动并发
  • 注意 gather 中任意协程出错会导致全部中断,如需容错,考虑 asyncio.shield() 或分别 try-catch

忽视事件循环生命周期与线程限制

异步代码必须运行在事件循环中,而一个线程最多只能有一个运行中的事件循环。常见问题包括:

  • 在已运行的事件循环里(如 Jupyter、FastAPI 后台)再次调用 asyncio.run() → 报 RuntimeError: asyncio.run() cannot be called from a running event loop
  • 在子线程中直接使用 await → 报 RuntimeError: no running event loop,需手动 asyncio.new_event_loop() 并 set_event_loop()
  • 跨线程传递协程对象无意义,协程绑定在定义它的事件循环上

简单原则:顶层用 asyncio.run();框架内(如 FastAPI、Tornado)由框架管理循环;多线程场景优先用 asyncio.to_thread() 或 loop.run_in_executor() 处理 CPU/阻塞任务。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

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

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

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

DeepSeek

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

WorkBuddy

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

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

119

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

594

2026.02.06

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

756

2026.05.09

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

639

2026.06.16

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3440

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

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

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

4818

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1349

2025.12.24

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

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

精品课程

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

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