大型简单XML文件的并发SAX处理?
我有几个超级大的XML文件(10GB到40GB不等),它们的结构非常简单:只有一个根节点,下面有很多行节点。我想用Python的SAX来解析这些文件,但因为每一行我都需要额外处理,所以40GB的文件要花整整一天才能处理完。为了加快速度,我想同时使用我所有的处理器核心。不过,问题是SAX解析器似乎无法处理“格式不正确”的XML片段,也就是当我随便跳到文件中的某一行并尝试从那里解析时,会出现这种情况。因为SAX解析器可以接受数据流,所以我想我需要把我的XML文件分成八个不同的数据流,每个流里包含[行数]/8行,并用假的开始和结束标签填充。请问我该怎么做呢?或者——有没有更好的解决办法我可能没想到的?谢谢!
2 个回答
1
我建议的做法是把整个XML文件读入一个内部格式,然后再进行额外的处理。使用SAX方法应该足够快,读取40GB的XML文件不超过一个小时。
根据你的数据情况,你可以使用SQLite数据库或者HDF5文件来做中间存储。
顺便提一下,Python其实并不是真正的多线程(可以查看GIL)。你需要用到multiprocessing
模块来把工作分成不同的进程。
2
你不能轻易把SAX解析分成多个线程来处理,而且其实也没必要这么做:如果你只是运行解析,没有其他的处理,通常大约20分钟就能完成。你应该把注意力放在你在ContentHandler中对数据进行的处理上。