我的AppEngine项目使用GAE URL fetch API从特定链接检索XML数据。我使用了来自here的样本,除了它看起来像这样:
InputStream stream;
URLConnection connection = new URL(url).openConnection();
connection.setConnectTimeout(0);
connection.setReadTimeout(0);
stream = connection.getInputStream();
这需要超过60秒(API允许的最大值),因此会导致DeadlineExceededException。为此目的使用TaskQueues也不是here提到的选项。
到目前为止,有没有其他人可能实现这一目标?
谢谢!
答案 0 :(得分:0)
任务队列的活动时间可能超过AppEngine自动扩展请求响应截止时间1分钟。在自动缩放时,任务可以运行10分钟。在基本或手动缩放时,它可以运行24小时。请参阅文档here。 (请注意,语言python实际上与材料无关 - 对于GAE,Go,PHP上的Java也是如此。)
最后,我必须回应其他用户所说的内容 - 延迟几乎肯定是由网址提取的端点引起的,而不是网络或应用引擎引起的。您还可以通过查看App Engine日志行来确认失败请求,从而确保这一点。 cpu_millis字段告诉您实际进程GAE端处理请求的时间长度,而millis字段将是请求的总时间。如果总时间远远高于cpu时间,则意味着成本在网络的其他地方。
这可能与多个连接相对于端点的有限资源的带宽耗尽有关。如果您在评论中添加了端点muc2014.communitymashup.net/x3/mashup
,那么在发布此评论时,在unix时间内大约1424738921
,平均延迟(包括完整响应,而不仅仅是在该端点上响应开始的时间是~6秒,但是如果没有为端点设置缩放系统,则在重负载下可能可行地达到> 60s。观察到的延迟已经非常高,但可能会因服务器端需要完成的工作类型,正在处理的请求/数据量等等而有所不同。
答案 1 :(得分:0)
问题在于EMF库中的函数使用的流占用了大量时间(之前的情况并非如此)。 而是将URL中的内容加载到StringBuilder中,将其转换为单独的InputStream并将其传递给函数。所有这些都是在cron工作中完成的。