Skip to content

Python 3.14 异步编程小课 ​

学生信息查询的异步需求 ​

查询一个学生的基础信息、课程和积分,需要等待多个接口。顺序查询会累积等待时间;同时发出大量请求,又会遇到并发过多、超时和资源释放的问题。

整套课从一个同步查询脚本开始,逐步完成带并发控制、缓存和后台任务的小型异步学生信息服务。每章围绕当前案例遇到的问题,先运行最小示例,再完善查询流程。

课程以 Python 3.14 为运行和讲解基准。主线使用本地 HTTP 服务和模拟数据库、Redis,无需安装真实数据库或 Redis 服务。第 8 章的真实异步客户端示例属于选学,需要额外依赖,真实 Redis 示例还需要运行 Redis 服务。

案例用于教学与服务原型。后台队列位于当前进程内,重启可能丢失未处理任务,不承担关键业务的可靠投递。

适用人群与前置知识 ​

适合下面几类同学:

  1. 已经会 Python 基础语法,但还没真正写过异步代码。
  2. 接触过 async、await,需要把它们组织成可运行的程序。
  3. 想学 FastAPI、异步 HTTP 和异步服务开发,需要补齐前置知识。

开始前应熟悉普通函数、列表、字典、for 循环和异常处理。如果这些基础还不稳,建议先补基础再跟练。

学习路径与章节导航 ​

建议按章节顺序学习:第 1~5 章建立 asyncio 基础,第 6 章接入 HTTP 请求,第 7~10 章逐步完成 Web 接口、存储与后台处理。

章节解决的问题与练习目标
第 1 章:异步编程与 I/O 等待对比顺序与并发等待,判断异步适合的 I/O 场景。
第 2 章:异步程序入口与协程等待用 asyncio.run() 启动异步程序,理解异步函数与 await。
第 3 章:并发任务组织:gather() 与 TaskGroup同时查询多类学生信息,组织并发任务与失败处理。
第 4 章:Semaphore 与并发控制控制同时执行的任务数量,避免无节制并发。
第 5 章:异步任务的超时、异常与取消限制等待时间,处理异常并正确传播取消。
第 6 章:异步 HTTP 请求与客户端复用使用 httpx.AsyncClient 请求本地学生服务,复用客户端并处理请求失败。
第 7 章:FastAPI 异步接口与阻塞调用将查询流程接入 Web 接口,识别同步阻塞调用并管理共享客户端。
第 8 章:异步数据库与 Redis 缓存减少重复查询,管理数据库连接与应用级共享资源。
第 9 章:异步队列、生产者与消费者将日志、统计和通知移交后台,处理队列积压与消费者退出。
第 10 章:异步学生信息服务综合实践整合前面的能力,完成带统一响应和调试接口的小型异步服务。

环境准备与代码运行 ​

Python 环境与依赖 ​

先安装 uv。只看课程网页的学员,在自己的电脑上创建一个课程练习目录,再进入其中执行:

bash
mkdir _code_async
cd _code_async
uv init --bare --no-workspace --name async-programming-course --python 3.14
uv add fastapi httpx uvicorn
uv run python --version

输出应为 Python 3.14.x。后续命令都从本地 _code_async 目录执行。

示例保存与启动 ​

每章的完整代码直接显示在页面中。按页面标注的文件名保存到本地 _code_async/cNN_topic/,再运行紧跟代码的命令。

例如,第 1 章的单文件示例保存在 _code_async/c01_why_async_programming/;独立演示使用 NN_topic.py 命名。多文件演示使用 NN_topic/ 目录,以 main.py 为入口,配套文件保存到同一案例目录。实际文件名以章节标注为准。

需要两个服务的案例,打开两个终端,均进入 _code_async 目录,先按终端 A 的命令启动学生服务,再按终端 B 的命令启动聚合服务。切换案例前停止旧服务,避免 8000、8001 端口冲突。

学习验收与练习方式 ​

每次先学一章:阅读需求和概念,运行示例,观察结果,再完成练习。每章至少修改一次参数或处理分支,核对变化后恢复原代码。

学完整套课,应能用运行结果验证这些能力:

  1. 对比顺序与并发查询的耗时,解释异步适用的场景。
  2. 控制并发数量,处理超时、异常和取消。
  3. 通过 FastAPI 查询学生信息,识别会阻塞事件循环的调用。
  4. 通过查询日志与返回字段验证缓存命中,并确认连接归还和客户端关闭。
  5. 核对后台任务记录,观察队列背压与消费者退出。
  6. 独立运行综合服务,借助响应字段和调试接口定位问题。

不要只核对程序是否启动。耗时变化、返回字段、失败结果和关闭日志,都是每章需要观察的学习结果。

下载课程代码 ​

下载 Python 3.14 异步编程课程代码(ZIP)。解压后进入 _code_async 目录,执行 uv sync 安装依赖,再按章节运行示例。