Python 现代开发学习笔记

17-06 发布失败恢复

本章题解 · 全部练习

题目

先推导:在文件保存、指向切换、进程启动哪步制造失败。完成时核对:旧版完整可读,恢复后请求能核对版本。

推导与做法

发布顺序是写临时目录、核对完整清单、发布版本目录、原子切换 current。缺少清单的 broken 版本不能激活,指向仍为 v1。

题解用项目真实发布器生成 v1、v2,并发送实际 FastAPI 请求。current 切为 v2 后,旧进程仍回答自己已加载的 v1;服务重新启动才加载 v2。回退同样先验证旧目录,再切指向并重开服务。

过程图

%% 每个节点保留输入、执行位置或执行后的实际状态。 flowchart TD S0["v1完整,进程已装入v1"] S1["broken缺少清单:禁止切换"] S0 --> S1 S2["v2完整后current切为v2"] S1 --> S2 S3["旧进程仍答v1,重开后答v2"] S2 --> S3 classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A linkStyle default stroke:#4657B5

实现与运行

查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。

在配套目录的 综合项目与交付/model_project 中运行。先按项目 README 执行 uv sync --locked。

# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run python "../../学习索引/参考实现/代码/ch17.py" 17-06

程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。

查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
  "before": "v1",
  "after_failed_publish": "v1",
  "old_process_after_switch": "v1",
  "restarted": "v2"
}

笔记正文与全部题解 · Ctrl / ⌘ K