2010-11-06 68 views
1

有时候,Google AppEngine有很多请求会返回错误。我一直在处理这个问题:memcaching中间处理的数据,然后再次请求页面。这经常起作用,因为memcached数据不必重新计算,并且请求会及时完成。处理AppEngine请求超时的更好方法?

但是......这个黑客需要看到一个错误,返回并再次点击。显然不甚理想。

有什么建议吗?

inb4:“更好地优化你的过程”,“把你的页面分成子流程”和“使用任务队列”。

感谢您的任何想法。

编辑 - 澄清: 长时间等待请求是好的,因为该函数是管理的。我基本上想要运行数据挖掘功能。我正在搜索我的数据存储并修改一堆对象。我认为正确的答案是,AppEngine可能不是这方面的正确工具。我应该将数据导出到一台可以自己运行这种功能的计算机上。看起来AppEngine确实打算用于较轻的处理需求。也许配额/定价模式应该提供增加处理超时和收取额外费用的选项。

+0

GAE看起来真的,真的是测试... – 2010-11-06 08:09:58

+0

尽管它确实能够做到大多数事情。 – vonkohorn 2010-11-07 07:15:45

回答

1

如果交互式用户请求触及30秒的最后期限,那么您遇到的问题就更大了:您的用户几乎肯定会放弃并离开。

你能做什么取决于你的代码在做什么。通过批量数据存储操作可以优化很多内容,或者通过改变数据建模​​方式来减少这些操作。您可以将工作卸载到任务队列;对于URLFetches,您可以并行执行它们。告诉我们更多关于你在做什么,我们可能会提供更具体的建议。

+0

谢谢。我编辑了我的问题来澄清。批量数据存储操作很有帮助。而且,实际上,并行化urlfetch会帮助我到另一个地方。 – vonkohorn 2010-11-08 06:01:48

1

我一直在客户端上构建一个自定义的自动重试调度器来处理类似的事情。每当ajax调用服务器失败时,客户端都会重试它。

如果你的页面是ajaxy,这个效果非常好。如果您的应用分散了整个HTML页面,那么您可以使用双向过程:首先发送仅包含ajax请求的空白页面。然后,当AppEngine收到该Ajax请求时,它会输出与之前相同的HTML。如果ajax调用成功,则会使用结果填充DOM。如果失败,则重试一次。