0

0

Python怎么用多进程并行处理大量XML文件

星降

星降

发布时间:2025-12-13 18:33:36

|

519人浏览过

|

来源于php中文网

原创

Python多进程并行解析XML文件需用multiprocessing.Pool分发路径,各子进程独立调用parse_one_xml()并用iterparse流式处理防OOM,避免全局状态,主进程统一汇总结果、写库和日志。

python怎么用多进程并行处理大量xml文件

用 Python 多进程并行处理大量 XML 文件,核心是把文件列表分给多个子进程各自解析,避免单进程串行卡在 I/O 或解析上。关键点:别让 XML 解析器(如 xml.etree.ElementTree)跨进程共享,每个进程独立加载和解析;用 multiprocessing.Pool 管理任务分发;注意大文件或内存敏感场景要流式解析(iterparse)。

用 Pool.map 分发文件路径

最直接的方式:把所有 XML 文件路径组成列表,用 Pool.map 并行调用解析函数。每个子进程拿到一个路径,自己打开、解析、提取数据,返回结果(比如字典或结构化记录)。

示例逻辑:

  • 先用 glob.glob("*.xml")pathlib.Path().rglob("*.xml") 收集全部路径
  • 定义一个顶层函数,如 parse_one_xml(filepath),内部用 ET.parse()ET.iterparse()
  • 创建进程池:with Pool(processes=4) as pool:,然后 results = pool.map(parse_one_xml, file_list)
  • 结果是按输入顺序返回的列表,可直接汇总或写入 CSV/数据库

用 iterparse 流式处理大 XML,防内存爆炸

单个 XML 文件很大(几百 MB 以上)时,ET.parse() 会一次性载入整个树,容易 OOM。改用 ET.iterparse() 边读边清空已处理节点,大幅降低内存占用

立即学习Python免费学习笔记(深入)”;

在多进程里照样可用,只需确保每个子进程独立调用:

Multiavatar
Multiavatar

Multiavatar是一个免费开源的多元文化头像生成器,可以生成高达120亿个虚拟头像

下载
  • parse_one_xml() 中打开文件句柄,传给 iterparse(file_obj, events=("start", "end"))
  • 遇到特定标签(如 "end" + "record")就提取字段,立即 yield 或 append 到临时列表
  • 处理完及时 file_obj.close(),避免句柄泄漏

避免全局状态和共享对象

多进程默认不共享内存,所以不要在模块顶层定义全局 XML 解析器、缓存字典或数据库连接——这些不会被子进程继承,强行访问会报错或行为异常。

正确做法:

  • 所有依赖(如命名空间映射、XPath 编译对象)都在 parse_one_xml() 内部初始化
  • 数据库写入不要在子进程中直连(易冲突),改为返回结构化数据,主进程统一入库;或用 concurrent.futures.ProcessPoolExecutor + 队列暂存结果
  • 日志用 logging.getLogger(__name__),配合 QueueHandler 统一收集,避免多进程打乱输出

加进度提示和错误隔离

跑几百个文件时,看不到进度容易误判卡死。可在主进程用 tqdm 包裹 pool.imap(非阻塞 map):

  • from tqdm import tqdm
  • results = list(tqdm(pool.imap(parse_one_xml, files), total=len(files)))

单个文件解析出错(如格式损坏)不该中断整个流程。在 parse_one_xml() 里包一层 try...except ET.ParseError,记录警告并返回 None 或占位值,后续过滤掉即可。

基本上就这些。不复杂但容易忽略细节:进程数别盲目设太高(一般设为 CPU 核心数或略高),XML 解析本身是 CPU+I/O 混合型,瓶颈常在磁盘读取,SSD 上开 6–8 进程通常比 HDD 上开 20 个更稳。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1903

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2094

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1084

2024.11.28

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

344

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1074

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

176

2025.09.12

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号