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

Python asyncio 异步编程完全指南(零基础轻松掌握 async/await 与事件循环)

在现代 Python 开发中,Python asyncio 是处理高并发、I/O 密集型任务的核心工具。无论你是想构建高性能 Web 服务、爬虫还是实时通信系统,掌握 异步编程入门 都是必不可少的技能。本文将带你从零开始,用最通俗易懂的方式理解 async/await 教程 中的关键概念,并深入浅出地讲解 事件循环基础

什么是 asyncio?

asyncio 是 Python 标准库中的一个模块,用于编写并发代码,使用 asyncawait 语法。它基于事件循环(Event Loop)模型,允许程序在等待 I/O 操作(如网络请求、文件读写)时切换到其他任务,从而提高效率。

Python asyncio 异步编程完全指南(零基础轻松掌握 async/await 与事件循环) 异步编程入门 async/await教程 事件循环基础 第1张

核心概念:async、await 与事件循环

1. async def:定义一个协程函数(coroutine function)。调用它不会立即执行,而是返回一个协程对象。

2. await:用于在协程内部“等待”另一个协程完成。只能在 async 函数中使用。

3. 事件循环(Event Loop):负责调度和运行所有协程。它是 asyncio 的“引擎”。

第一个 asyncio 程序

让我们从一个简单的例子开始:

import asyncioasync def say_hello():    print("Hello")    await asyncio.sleep(1)  # 模拟异步等待    print("World!")# 运行协程asyncio.run(say_hello())

输出:

HelloWorld!

注意:asyncio.run() 是 Python 3.7+ 推荐的运行协程的方式,它会自动创建并管理事件循环。

并发执行多个任务

asyncio 的强大之处在于可以同时运行多个协程。使用 asyncio.gather() 可以并发执行多个任务:

import asyncioasync def task(name, delay):    print(f"Task {name} started")    await asyncio.sleep(delay)    print(f"Task {name} finished")async def main():    # 并发运行三个任务    await asyncio.gather(        task("A", 2),        task("B", 1),        task("C", 3)    )asyncio.run(main())

输出(注意顺序):

Task A startedTask B startedTask C startedTask B finishedTask A finishedTask C finished

可以看到,尽管任务 A 先启动,但任务 B 因为延迟短先完成。这说明它们是并发执行的,而不是顺序执行。

常见误区与注意事项

  • 不要在 async 函数中使用阻塞操作(如 time.sleep()),应使用 asyncio.sleep()
  • await 只能在 async def 定义的函数中使用。
  • 不要手动创建事件循环(除非有特殊需求),优先使用 asyncio.run()

总结

通过本教程,你已经掌握了 Python asyncio 的基本用法,包括如何定义协程、使用 await、并发执行任务以及理解事件循环的作用。这些是 异步编程入门 的核心内容。

记住:async/await 教程 的关键在于理解“非阻塞”和“协作式多任务”。当你熟练掌握这些概念后,就能轻松应对高并发场景,写出高效、响应迅速的 Python 程序。

继续练习吧!尝试用 asyncio 写一个简单的 HTTP 请求并发下载器,或模拟多个用户同时登录的场景。实践是最好的老师!