2

我正在开发一个谷歌应用程序引擎应用程序,该应用程序必须处理从超过 GAE 限制的表单上传的一些较大 (<100 MB) XML 文件——上传文件需要超过 30 秒,或者超过10 MB 请求大小。

我设想的当前解决方案是将文件上传到 blobstore,然后将其带入应用程序(一次 1 MB)进行解析。这也很可能超过请求的 30 秒限制,所以我想知道是否有一种很好的方法来处理块中的大型 XML 文档,因为我最终可能不得不在 30 秒内通过任务队列来完成它。

我目前正在将 BeautifulSoup 用于项目的其他部分,已从 minidom 切换。有没有办法处理与 GAE 配合得很好的块数据?

4

4 回答 4

2

30 秒的限制适用于代码的执行时间,并且在收到整个用户请求之前,您的代码不会开始执行 - 因此用户上传文件所花费的时间无关紧要。

也就是说,使用 blobstore 听起来确实是最好的主意。您可以使用BlobReader来模拟具有 blobstore 访问权限的文件,将 blob 与任何其他文件一样处理,并使用标准库(例如 BeautifulSoup)读取它。但是,如果 XML 文件足够大,则可能会耗尽内存,因此您可能需要考虑使用基于 SAX 的方法,它不需要将整个文件保存在内存中。

至于处理文件的执行时间限制,您几乎肯定希望在任务队列上执行此操作,其中限制为 10 分钟,并且您不会强迫用户等待。

于 2010-12-23T23:04:27.503 回答
1

PullDom允许您仅加载 XML 文档的一部分。不幸的是,官方的 Python 文档相当稀少。更多信息可以在这里这里找到。

于 2010-12-23T21:26:53.380 回答
0

听起来 App Engine 确实不适合这个项目。

于 2010-12-23T22:28:22.890 回答
0

由于 python 的魔力让一切看起来都一样,这很容易使用 pulldom。只需解析从应用引擎返回的 blob 读取器,如下所示:

blob_reader = blobstore.BlobReader(blob_info.key())
events = pulldom.parse(blob_reader)

这是我最喜欢 python 的地方,你尝试一些东西,它通常会起作用。

于 2011-06-10T17:09:11.533 回答