繁体   English   中英

Python和内存消耗

[英]Python and Memory Consumption

我正在寻找一种方法,可以使用高内存程序来处理RAM和CPU的过载...我想处理文件中包含的大量数据。 然后,我读取文件并处理其中的数据。 问题在于有许多嵌套的for循环,并且正在从所有处理过的数据中创建根XML文件。 在半小时左右的运行时间后,该程序很容易消耗了几GB的RAM。 有什么我可以做的事情,不要让RAM变大和/或解决它。

您是否真的需要一次将XML文件中的全部数据保留在内存中?

那里的大多数(全部?)XML库都允许您进行迭代解析 ,这意味着您仅将XML文件的几个节点而 不是整个文件 保留在内存中 除非您自己创建一个包含XML文件的字符串而没有任何库,但这有点疯狂。 在这种情况下,请尽快使用库。

此处显示的特定代码示例可能不适用于您的项目,但是当面对以GB或更大字节计量的XML数据时,请考虑一些原则(由测试和lxml文档证明):

  • 使用迭代分析策略来增量处理大型文档。
  • 如果需要以随机顺序搜索整个文档,请移至建立索引的XML数据库。
  • 对您选择的数据要非常保守。 如果仅对特定节点感兴趣,请使用通过这些名称选择的方法。 如果需要谓词语法,请尝试使用XPath类和方法之一。
  • 考虑手头的任务和开发人员的舒适程度。 当不考虑速度时,Python开发人员可能更喜欢lxml的objectify或Amara之类的对象模型。 仅需要解析时, cElementTree更快。
  • 花时间进行甚至简单的基准测试。 处理数百万条记录时,会产生很小的差异,而且哪种方法最有效并不总是很明显。

如果您需要对数据进行复杂的操作,为什么不将其放在关系数据库上并从那里对数据进行操作呢? 那将有更好的表现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM