1. 异步Hello World

异步Hello World 学习卡片

任务说明

本案例的目标是使用 Python 标准库 asyncio 创建一个最简单的协程并运行它,最终在控制台输出 Hello World。通过这个最小示例,理解 asyncio.run() 如何创建并驱动事件循环,以及协程函数与普通函数的区别。

核心概念

在 asyncio 中,协程是通过 async def 定义的函数。调用协程函数不会立即执行函数体,而是返回一个协程对象。该对象必须被放入事件循环中才能运行。asyncio.run() 是 Python 3.7+ 提供的顶层入口,它负责创建一个新的事件循环、运行传入的协程直到完成,并在结束后关闭事件循环。因此,asyncio.run(main()) 是启动异步程序最简洁、最推荐的方式。

代码实现

import asyncio

async def say_hello():
    print("Hello World")

async def main():
    await say_hello()

if __name__ == "__main__":
    asyncio.run(main())

代码说明

  • say_hello() 是一个协程函数,函数体只有一条打印语句。
  • main() 是另一个协程,通过 await 等待 say_hello() 执行完毕。这里 await 表示将控制权交还给事件循环,直到被等待的协程完成。
  • asyncio.run(main()) 创建事件循环,运行 main(),完成后自动关闭循环。

运行与验证

将上述代码保存为 hello.py,在命令行执行:

python hello.py

程序运行后,控制台应输出一行文本:

Hello World

判定标准:程序无报错退出,且输出内容与预期完全一致,即表示协程被正确创建并由事件循环成功驱动执行。

事件循环执行流程

asyncio.run(main()) 执行时序 事件循环 (Event Loop) asyncio.run() main() say_hello() 创建 await print Hello World 返回

上图展示了 asyncio.run() 启动事件循环后,依次调度 main() 与 say_hello() 的执行路径。事件循环负责管理所有协程的调度与切换,await 关键字则用于挂起当前协程并等待子协程完成。