我正在寻找一种能够使用高内存程序处理RAM和CPU过载的方法...我想处理文件中包含的大量数据。然后我读取文件并处理其中的数据。问题是有许多嵌套for循环,并且正在从处理的所有数据创建根XML文件。 在运行时间大约半小时后,该程序很容易消耗几个RAM。 有什么我可以做的,不让RAM变得如此之大和/或解决它...?
答案 0 :(得分:3)
您是否真的需要立即将XML文件中的所有数据保存在内存中?
大多数(全部?)XML库允许您do iterative parsing,这意味着您keep in memory just a few nodes of the XML file,not the whole file。这是除非你自己创建一个包含XML文件的字符串而没有任何库,但这有点疯狂。如果是这种情况,请尽快使用库。
提供的特定代码示例here可能不适用于您的项目,但考虑到一些原则 - 通过测试和lxml文档 - 在面对以千兆字节或更多为单位测量的XML数据时:
- 使用迭代解析策略逐步处理大型文档。
- 如果需要以随机顺序搜索整个文档,请转到索引的XML数据库。
- 您选择的数据非常保守。如果您只对特定节点感兴趣,请使用按这些名称选择的方法。如果需要谓词语法,请尝试使用其中一个XPath类和方法。
- 考虑手头的任务和开发人员的舒适程度。当速度不是考虑因素时,像lxml的客观化或Amara这样的对象模型对于Python开发人员来说可能更自然。只需要解析时,cElementTree会更快。
- 花点时间进行简单的基准测试。处理数百万条记录时,小差异会加起来,而且哪种方法效率最高并不总是很明显。
如果您需要对数据执行复杂的操作,为什么不将它放在关系数据库上并对其中的数据进行操作?那会有更好的表现。