1. 异步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() 与 say_hello() 的执行路径。事件循环负责管理所有协程的调度与切换,await 关键字则用于挂起当前协程并等待子协程完成。