从 JSON 加载 Pydantic 模型而不会耗尽内存

主要观点:有一个大的 JSON 文件想加载到 Pydantic 中,但内存使用量大导致难以读取,可通过以下方法解决。
关键信息:

  • Pydantic 加载 JSON 时默认内存使用高,约为 JSON 文件的 20 倍。
  • 可通过使用ijson(增量 JSON 解析器,可流式处理 JSON 文档)减少内存使用,解析时将内存使用从主要用于解析转为主要用于结果对象的内存表示,虽解析速度变慢约 5 倍,但内存使用降至 1200MB。
  • 还可通过使用@dataclass(slots=True)(更高效的内存表示,固定可能的属性列表)进一步减少内存使用至 450MB,需切换到 Pydantic 的数据类支持,且需微调解析代码。
    重要细节:
  • 示例中 JSON 文件内容及模型定义,如Customer模型等。
  • 测量内存使用的方法及相关结果展示。
  • 总结三种技术在解析 100MB JSON 文件时的峰值内存使用情况对比。
阅读 40
0 条评论