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

Python异步编程入门指南(从零开始掌握 asyncio 与协程)

在现代软件开发中,处理大量并发任务(如网络请求、文件读写等)变得越来越重要。传统的同步编程方式在面对高并发场景时往往效率低下,而 Python异步编程 提供了一种更高效、资源占用更少的解决方案。

Python异步编程入门指南(从零开始掌握 asyncio 与协程) Python异步编程 协程 异步IO 第1张

什么是异步编程?

异步编程是一种编程范式,允许程序在等待某个操作(如网络请求或磁盘 I/O)完成的同时,继续执行其他任务,而不是“卡住”等待。这大大提高了程序的效率和响应速度。

在 Python 中,异步编程的核心是 asyncio 模块,它自 Python 3.4 起成为标准库的一部分。通过使用 asyncawait 关键字,我们可以轻松定义和调用协程(coroutines)——一种可以暂停和恢复执行的函数。

协程基础

协程是异步编程的基本单元。定义一个协程非常简单:

import asyncioasync def say_hello():    print("Hello")    await asyncio.sleep(1)  # 模拟异步操作    print("World!")

注意:协程函数前面有 async 关键字,内部使用 await 来等待另一个协程或异步操作完成。

运行协程

协程不能像普通函数那样直接调用。你需要使用 asyncio.run()(Python 3.7+)来启动事件循环并运行协程:

# 运行上面定义的协程asyncio.run(say_hello())

输出结果:

Hello(等待1秒)World!  

并发执行多个任务

异步编程的真正优势在于并发处理多个 I/O 密集型任务。例如,同时发起多个网络请求:

import asyncioasync def fetch_data(task_id):    print(f"开始任务 {task_id}")    await asyncio.sleep(2)  # 模拟网络请求    print(f"任务 {task_id} 完成")    return f"数据来自任务 {task_id}"async def main():    # 并发运行三个任务    results = await asyncio.gather(        fetch_data(1),        fetch_data(2),        fetch_data(3)    )    print(results)# 启动主协程asyncio.run(main())

这段代码会在约 2 秒内完成所有任务(而不是 6 秒),因为它们是并发执行的!这就是 异步IO 的强大之处。

何时使用异步编程?

异步编程特别适合以下场景:

  • Web 服务器处理大量并发请求(如使用 FastAPI 或 aiohttp)
  • 爬虫需要同时抓取多个网页
  • 实时聊天应用或游戏服务器
  • 任何涉及大量 I/O 操作(网络、文件、数据库)但计算量不大的任务

但请注意:异步编程并不适用于 CPU 密集型任务(如图像处理、复杂计算),这类任务更适合使用多进程或多线程。

小结

通过本教程,你已经了解了 Python异步编程 的基本概念,学会了如何定义协程、运行协程以及并发执行多个异步任务。核心工具 asyncio 配合 async/await 语法,让编写高效 I/O 程序变得简单直观。

记住关键词:Python异步编程asyncio协程异步IO。掌握这些,你就迈入了高性能 Python 编程的大门!

提示:实践是最好的老师。尝试修改上面的代码,添加更多任务或模拟不同的延迟,观察程序行为的变化。