我正在尝试为我的GAE应用程序创建一个端点,我可以从客户端发送带有CSV文件(作为表单)的POST请求,然后服务器将接收它,并将其存储在Datastore中。但是,当我尝试发送大文件时,它会超时。似乎最大URL提取超时为59.9秒,而这就是它失败的地方。
class CostTest(ndb.Model):
pickUp = ndb.StringProperty()
amount = ndb.StringProperty()
def post(self):
self.response.write("part 1")
print self.request.get('type')
check_values = self.request.POST.getall('file')
array = list(csv.reader(check_values))
for c in array:
pickup, amount = c
entry = CostTest(pickUp=pickup,
amount=amount)
entry.put()
#print c
self.response.write("part 2")
self.response.write(self.request.get('file'))
app = webapp2.WSGIApplication([
('/csv/order', CsvFileLoader),
('/csv/kiosk', CsvFileLoader)
], debug=True)
我用来测试的文件有大约4600行,但是它无法加载它们!我尝试使用Blobstore,但是我无法弄清楚如何从POST请求中获取文件(如果可能的话)?似乎存储到blob商店的唯一方法是通过用户提交的表单!
提前感谢您的帮助。
答案 0 :(得分:1)
您的代码问题不是“全部加载”,而是您正在进行4600次同步放置!如果你批处理所有这些并使用ndb.put_multi,我相信它有效。 python脚本可以复制提交的表单,上传到blobstore时有什么问题?
答案 1 :(得分:1)
即使你有时"有时候"为了满足60s的HTTP请求限制,GAE数据存储可以随机地花费更长的时间来处理读写操作,所以我建议先将上传的CSV文件存储在某处(你提到的blobstore,甚至是另一个数据存储实体,只要注意大小限制)然后使用任务队列异步处理它(限制为10分钟)。