在App Engine中使用Blobstore解析大型XML文件的部分内容?
我正在开发一个谷歌应用引擎的应用,这个应用需要处理一些比较大的(小于100MB)XML文件,这些文件是通过表单上传的,但会超过谷歌应用引擎的限制——要么上传文件的时间超过30秒,要么请求的大小超过10MB。
我现在想的解决方案是先把文件上传到blobstore,然后再把文件分成每次1MB的部分导入到应用中进行解析。不过,这样做也可能会超过30秒的请求限制,所以我在想有没有什么好的方法可以分块处理这些大的XML文档,因为我可能需要通过任务队列来分30秒一次处理。
我目前在项目的其他部分使用BeautifulSoup,之前是用minidom。请问有没有什么方法可以分块处理数据,并且能和谷歌应用引擎很好地配合?
4 个回答
0
听起来,App Engine 可能不太适合这个项目。
2
30秒的限制是针对你代码执行的时间来说的,而你的代码在用户请求完全接收之前是不会开始执行的。所以用户上传文件所花的时间其实是没关系的。
不过,使用blobstore确实是个不错的主意。你可以使用BlobReader,它可以模拟一个文件,通过blobstore来访问,这样你就可以像处理其他文件一样处理这个blob,并使用标准库(比如BeautifulSoup)来读取它。不过,如果XML文件特别大,你可能会遇到内存不足的问题,所以可以考虑使用基于SAX的方法,这样就不需要把整个文件都放在内存里。
至于处理文件的执行时间限制,你几乎肯定想在任务队列中进行处理,那里的限制是10分钟,这样就不会让用户等太久。