《Python高级编程》3.1 CPython 执行模型与字节码
深入 CPython 执行内核:栈式虚拟机的求值栈与指令编码、dis 的栈效应计算、类与推导式的代码生成、异常表机制,以及 3.11+ 自适应专门化如何在运行时把 LOAD_ATTR 改写为 LOAD_ATTR_INSTANCE_VALUE,附 3.14 字节码变化实测对照。
tag
深入 CPython 执行内核:栈式虚拟机的求值栈与指令编码、dis 的栈效应计算、类与推导式的代码生成、异常表机制,以及 3.11+ 自适应专门化如何在运行时把 LOAD_ATTR 改写为 LOAD_ATTR_INSTANCE_VALUE,附 3.14 字节码变化实测对照。
把抽取-转换-加载拼成一条可重跑、有依赖的数据管道:讲透幂等的三种落地手段,用标准库手写一个带拓扑排序与幂等状态的 DAG 调度器并真跑,再用 Polars 原生 Parquet 做分区落盘,最后收束成一份数据质量校验、水位线监控与可观测清单。
用同一份 50 万行真实数据实测 Polars 2.0:LazyFrame 惰性求值与查询计划、投影与谓词下推、多线程并行与流式引擎、表达式 API 与 pandas 的对照迁移,并给出同一任务的耗时对比,最后讲清什么时候该换、什么时候别换。
用 50 万行真实数据集实测 pandas 3.0 的性能陷阱:Copy-on-Write 成为默认后链式赋值的真实行为、SettingWithCopyWarning 的现状、dtype 与内存占用、apply 与向量化的耗时差距、groupby 与 merge 的坑,以及分块读取的取舍。
GitHub Actions Python CI 实战:基于 Poetry 的依赖管理、pytest 测试自动化(覆盖率/coverage)、Black 代码格式化、Flake8 静态检查、mypy 类型检查、多版本 Python 矩阵测试(3.9/3.10/3.11/3.12)、缓存策略加速、安全扫描(bandit/safety)、发布到 PyPI 自动化
本节从字符串拼接式的代码生成升级到 AST 变换:用 compile() 的三种模式、ast.NodeTransformer 与 fix_missing_locations 把 assert 改写成显式检查,并注入函数计时。实测改写前后的 dis 字节码差异,以及为什么改写版能在 python -O 下继续生效,而原始 assert 会被剥离。
本节讲透类装饰器与 __set_name__ 的执行时机:类装饰器在元类 __init__ 之后运行,看到的是已经完成 __set_name__ 的类对象;__set_name__ 按定义顺序为每个描述符调用一次,且 3.12 起异常不再被包装成 RuntimeError。再用属性工厂与 __init_subclass__ 组合实测一个字段收集框架,并对照标准库 cached_property。
本节从 CPython 实现角度拆解 class 语句:它如何脱糖成 __build_class__ 与 type() 三参数调用,元类的 __prepare__、__new__、__init__ 与 __set_name__、__init_subclass__ 的精确执行顺序,元类冲突背后的 MRO 规则,以及何时该用 __init_subclass__ 替代元类。附实测时序与性能数据。
长连接上线后真正难的三件事:用 ping/pong 心跳及时剔除假死连接、用指数退避加抖动做健壮重连、用并发安全的 ConnectionManager 广播并给慢消费者做有界队列背压,每一步都附真实运行输出与取舍分析,并给出可对照的上线检查清单。
用一条只读 HTTP 流做服务端推送:真跑 text/event-stream 的 data/event/id 字段、StreamingResponse 流式输出与 Last-Event-ID 断线续传,并给出 SSE 与 WebSocket 的选型对照。
从轮询到双向长连接:用标准库真跑一遍 WebSocket 握手与帧格式,掌握 FastAPI 的 @app.websocket 与 WebSocketDisconnect,并设计带类型字段与版本协商的 JSON 消息信封,最后讲清文本 JSON 与二进制的取舍。
Python 微服务架构完整指南:单体 vs 微服务决策、服务拆分原则、FastAPI 服务模板、gRPC/HTTP 服务间通信、RabbitMQ/Kafka 消息驱动、服务发现与网关、可观测性、部署与演进式拆分路径。
Python 网络爬虫与自动化完整指南:requests/httpx 请求、BeautifulSoup/lxml 解析、Scrapy 框架、Playwright 浏览器自动化、反爬应对(限速/代理/指纹)、robots 合规与数据清洗工程。
Python 库与 API 设计完整指南:包结构与模块划分、公开 API 面设计、类型标注与 Protocol、语义化版本与向后兼容策略、文档工程(docstring/类型/示例)、发布与社区治理,附高质量库案例拆解。
Python 调用 C/C++ 的四种方案全对比:ctypes 动态库调用、cffi 安全绑定、Cython 编译加速、PyO3/Rust 扩展,含性能基准、GIL 释放、构建配置与实战案例。
Python 调试与日志工程完整指南:print 调试进阶、pdb/ipdb/breakpoint 交互调试、logging 架构(Logger/Handler/Formatter/Filter)、结构化日志(structlog/JSON)、异常追踪与 traceback、性能剖析、生产可观测性集成。
Python 生态的分布式计算两巨头:Dask 与 Ray。本文系统讲解 Dask 的惰性图计算与 DataFrame/数组扩展、Ray 的 actor/task 并行模型、集群启动与资源调度、两者选型对比,以及大数据预处理、RL 训练、服务化部署的真实落地模式。
Python 设计模式完整指南:SOLID 五原则、创建型/结构型/行为型经典模式、用 Python 语言特性(装饰器/描述符/生成器/鸭子类型)简化经典模式、函数式模式、模式选型与过度设计、实战架构示例。
本节从协议角度讲清 dunder:用实测证明隐式调用只在类型上查找、绕过实例字典,拆开迭代协议的 __iter__ 与 __getitem__ 回退、比较协议的 __eq__/__hash__ 联动、NotImplemented 触发的反射运算与子类优先规则,并用 dis 的 BINARY_OP/COMPARE_OP 把运算符还原成方法调用。
本节用实测把 obj.attr 的查找顺序拆开:沿 type.__mro__ 找数据描述符、实例 __dict__、非数据描述符的优先级,逐一验证 property/staticmethod/cached_property 各自是哪一类描述符,并用 dis 的 LOAD_ATTR 与 member_descriptor 说明 __slots__ 的底层实现。