0

0

Python异步编程协程_事件循环解析【教程】

冷炫風刃

冷炫風刃

发布时间:2025-12-30 10:44:02

|

944人浏览过

|

来源于php中文网

原创

Python异步编程的核心是协程与事件循环配合:协程需由事件循环调度执行,asyncio.run()是推荐的启动方式,await用于让出控制权,create_task()或gather()实现并发。

python异步编程协程_事件循环解析【教程】

Python异步编程的核心是协程(coroutine)与事件循环(event loop)的配合。协程本身不自动运行,必须由事件循环调度执行;而事件循环是异步程序的“心脏”,负责监听I/O事件、分发任务、驱动协程推进。

协程不是线程,也不自动并发

定义一个 async def 函数只是创建了一个协程对象,它不会立即执行:

async def fetch_data():
    print("start")
    await asyncio.sleep(1)
    print("done")
<p>coro = fetch_data()  # 此时什么都没发生

协程对象需要被“提交”给事件循环才能运行。直接调用 coro.send(None) 或手动驱动会绕过事件循环,失去异步能力,也容易出错。

事件循环是唯一调度中心

Python 3.7+ 推荐使用 asyncio.run() 启动主协程,它会自动创建并管理一个事件循环:

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

Bolt.new
Bolt.new

Bolt.new是一个免费的AI全栈开发工具

下载
  • asyncio.run(main()):最简方式,适合脚本和主入口,运行结束后自动关闭循环
  • asyncio.get_event_loop():获取当前线程的默认循环(已弃用,不推荐)
  • asyncio.new_event_loop() + set_event_loop():用于多线程场景,需自行管理生命周期

注意:一个线程只能有一个运行中的事件循环;多次调用 run() 会报错“event loop is running”。

await 的本质是让出控制权

await 表达式不是等待,而是向事件循环发出信号:“我暂时不干活了,请去执行别的协程”。事件循环会在被 await 的对象(如 asyncio.sleep()aiohttp.get())准备好后,恢复该协程继续执行。

  • 只能在 async def 函数中使用 await
  • 被 await 的对象必须是 awaitable:协程对象、带 __await__ 方法的对象、或 Future 实例
  • await asyncio.sleep(0) 是主动让出一次调度权的常用技巧

并发靠 asyncio.create_task()gather()

单个 await coro 是顺序执行;要真正并发,需把多个协程包装为任务并同时提交:

async def main():
    task1 = asyncio.create_task(fetch_data("A"))
    task2 = asyncio.create_task(fetch_data("B"))
    await task1
    await task2  # 等两个都完成
<h1>或更简洁地:</h1><h1>await asyncio.gather(fetch_data("A"), fetch_data("B"))</h1><p>

create_task() 立即调度协程,适合需要提前启动、中间有逻辑判断、或需取消任务的场景;gather() 更适合批量等待一组协程结果。

相关文章

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

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

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

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

765

2023.08.10

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

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

377

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

103

2026.02.06

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

69

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

37

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

82

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号