我正在尝试处理大型(~50mb)大小的xml文件以存储在数据存储区中。我尝试过使用后端,套接字(通过urlfetch来拉取文件),甚至直接在我的源代码中上传文件,但是再次保持运行限制(即32 mb限制)。
所以,我真的很困惑(而且有点生气/沮丧)。 appengine真的没有办法处理大文件吗?似乎有一个潜在的工作,这将涉及remote_apis,亚马逊(或我猜的谷歌计算)和安全/设置噩梦......
Http范围是我考虑的另一件事,但以某种方式将不同的分割部分连接在一起会很痛苦(除非我能设法将文件分割成精确的点)
这看起来很疯狂,所以我想我会问堆栈流......我错过了什么?
更新 尝试使用范围请求,看起来我正在尝试从中流式传输的服务器不使用它。所以现在我正在考虑下载文件,将其托管在另一台服务器上,然后使用appengine通过后端上的范围http请求访问它然后自动化整个过程,这样我就可以将它作为一个cron作业运行:/(疯狂)必须为这么简单的事情做所有这些工作... 叹息)
答案 0 :(得分:1)
如何将其存储在云存储中并逐步读取,因为您可以逐行访问(无论如何都是Python),因此它不会消耗所有资源。
https://developers.google.com/appengine/docs/python/googlecloudstorageclient/
https://developers.google.com/storage/
GCS客户端库允许您的应用程序读取和写入文件 文件到Google云端存储(GCS)中的存储分区。这个库支持 读取和写入大量数据到GCS,内部错误 处理和重试,因此您不必编写自己的代码 这个。此外,它提供了预读的读取缓冲,因此您的应用程序 可以更有效率。
GCS客户端库提供以下功能:
一个open方法,它返回一个可以调用的类文件缓冲区 用于读写的标准Python文件操作。一个listbucket 列出GCS桶内容的方法。一种统计方法 获取有关特定文件的元数据。删除的删除方法 来自GCS的文件。
我已经用这种方式处理了一些非常大的CSV文件 - 尽可能多地读取,处理,然后阅读更多。
def read_file(self, filename):
self.response.write('Truncated file content:\n')
gcs_file = gcs.open(filename)
self.response.write(gcs_file.readline())
gcs_file.seek(-1024, os.SEEK_END)
self.response.write(gcs_file.read())
gcs_file.close()
使用标准python进行增量读取!