1.6 KiB
1.6 KiB
title, created, updated, type, tags, sources
| title | created | updated | type | tags | sources | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| pydantic-core | 2026-06-10 | 2026-06-10 | concept |
|
|
pydantic-core
pydantic 生态的物理引擎——Rust 编写的校验核心,通过 PyO3 绑定到 Python,完全脱离 GIL。
校验流程
当调用 model_validate(data) 时:
- Python 层将模型定义转为 CoreSchema JSON(一份"校验指令")
- CoreSchema JSON 通过 PyO3 传给 Rust 层
- Rust 层按 schema 逐字段校验、类型转换、处理嵌套
- 返回校验通过的类型化 Python 对象,或
ValidationError
关键:步骤 2-4 全部在 Rust 侧完成,不走 GIL。
性能
| 场景 | 纯 Python | pydantic-core | 倍数 |
|---|---|---|---|
| 简单模型 1000 次 | ~12ms | ~1.5ms | 8× |
| 嵌套 3 层 10000 次 | ~450ms | ~35ms | 13× |
| JSON 大文件反序列化 | ~800ms | ~48ms | 17× |
| 内存峰值 | 基线 | -35% | — |
对 AI 开发者的关键意义
asyncio.gather()并发 20 个 LLM API 调用时,每个回复的 JSON 解析在不同线程并行跑 Rust 校验,互不阻塞- 深层嵌套模型收益最大——每层嵌套原来都是 Python 层的递归开销
三配置升级
model_config = {
"strict": True, # 类型不匹配直接炸,不静默转换
"extra": "forbid", # 多字段立刻报错
"frozen": True, # 创建后不可修改
}