并行SAX处理大型简单的XML文件?

时间:2014-04-22 08:50:32

标签: python xml parsing concurrency sax

我有几个巨大的XML文件(10GB-40GB),它们的结构非常简单:只有一个包含多个行节点的根节点。我正在尝试使用Python中的SAX解析它们,但是我必须对每一行进行额外处理意味着40GB文件需要一整天才能完成。为了加快速度,我想同时使用我的所有内核。不幸的是,似乎SAX解析器无法处理“格式错误”的XML块,这是您在文件中寻找任意行并尝试从那里解析时获得的。由于SAX解析器可以接受一个流,我想我需要将我的XML文件分成八个不同的流,每个流包含[行数] / 8行,并用假的开始和结束标记填充。我该怎么做呢?或者 - 有没有更好的解决方案,我可能会失踪?谢谢!

2 个答案:

答案 0 :(得分:2)

您无法轻松地将SAX解析拆分为多个线程,并且您不需要:如果您只是在没有任何其他处理的情况下运行解析,它应该在20分钟左右运行。重点关注您对ContentHandler中数据的处理。

答案 1 :(得分:1)

我建议的方法是将整个XML文件读入内部格式,然后再进行额外处理。 SAX应该足够快,可以在不到一个小时的时间内读取40GB的XML。

根据数据,您可以使用SQLite数据库或HDF5文件进行中间存储。

顺便说一句,Python并不是真正的多线程(参见GIL)。您需要multiprocessing模块将工作拆分为不同的流程。