54 lines
1.6 KiB
Markdown
54 lines
1.6 KiB
Markdown
---
|
||
title: "pydantic-core"
|
||
created: 2026-06-10
|
||
updated: 2026-06-10
|
||
type: concept
|
||
tags: [pydantic, rust, validation, performance]
|
||
sources: [raw/articles/pydantic-three-piece-suite-2026.md]
|
||
---
|
||
|
||
# pydantic-core
|
||
|
||
> [[pydantic|Pydantic]] 生态的物理引擎——Rust 编写的校验核心,通过 PyO3 绑定到 Python,完全脱离 GIL。
|
||
|
||
## 校验流程
|
||
|
||
当调用 `model_validate(data)` 时:
|
||
|
||
1. Python 层将模型定义转为 **CoreSchema JSON**(一份"校验指令")
|
||
2. CoreSchema JSON 通过 PyO3 传给 Rust 层
|
||
3. Rust 层按 schema 逐字段校验、类型转换、处理嵌套
|
||
4. 返回校验通过的类型化 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 层的递归开销
|
||
|
||
## 三配置升级
|
||
|
||
```python
|
||
model_config = {
|
||
"strict": True, # 类型不匹配直接炸,不静默转换
|
||
"extra": "forbid", # 多字段立刻报错
|
||
"frozen": True, # 创建后不可修改
|
||
}
|
||
```
|
||
|
||
## 参考
|
||
|
||
- [[pydantic|Pydantic 生态]]
|
||
- [[typeadapter|TypeAdapter]]
|
||
- [[pydantic-three-piece-suite|Pydantic 三件套]]
|