0

我需要定期运行获取相对较大的 xml 文档 (5Mb) 并处理它们的计划任务。

我目前遇到的一个问题是我达到了应用程序实例的内存限制,并且我的任务运行时实例被终止。

我做了一些粗略的测量:

  1. 任务通常安排到已经使用 40-50 Mb 内存的实例中
  2. 5 MB 文本文件的 URL 提取将实例内存使用量增加到 65-75 Mb。
  3. 将提取的文本解码为 Unicode 会将内存使用量增加到 95-105 Mb。
  4. 将 unicode 字符串传递给 lxml 解析器并访问其根节点会将实例内存使用量增加到大约 120-150 Mb。
  5. 在文档的实际处理过程中(将 xml 节点转换为数据存储模型等),实例被终止。

我可以通过将编码文本直接传递给 lxml 解析器来避免第三步并节省一些内存,但是为 lxml 解析器指定编码对我来说在 GAE 上有一些问题。

我可能可以使用 MapReduce 库来完成这项工作,但是对于 5mb 的文件真的值得吗?

另一种选择可能是将任务拆分为多个任务。

我也可以将文件保存到blobstore,然后通过从blobstore逐行读取来处理它?作为旁注,如果 UrlFetch 服务允许“按需”读取响应以简化大型文档的处理,那将很方便。

那么一般来说,执行此类工作最方便的方法是什么?

谢谢!

4

1 回答 1

2

这是在前端还是后端实例上?对我来说,这看起来像是后端实例的工作。

您是否考虑过使用不同的实例类型?

于 2012-04-11T09:38:43.407 回答