60年代截止日期是如何应用于appengine.run和.fetch检索的?

appengine文档声明.run()和.fetch()的默认截止时间为60秒。 我想了解如何应用截止日期,特别是在任务或定时任务的情况下,整个过程可以运行10分钟。 想象一下,我们有1000只鹅:

geese = Goose.all().run(batch_size=100)
for goose in geese:
   goose.cook()
   # for sake of example, cooking a goose takes 1 second

如果我理解正确,这将从数据存储中检索100只鹅,并依次烹饪每只鹅。 当它到达第61只鹅时,超过60秒将会过去,但这不重要,因为当调用.run时,所有100个结果都被检索到。 在第100只鹅后,它将尝试检索下一批100只鹅,这将导致超过期限的错误。 是对的吗?

假设这是正确的,那么如果我们这样做:

geese = Goose.all().run(batch_size=100, limit=100)
for goose in geese:
   goose.cook()
   # for sake of example, cooking a goose takes 1 second 

我认为这将执行w / oa截止日期超出错误。 是对的吗? 当然,它只会检索前100只鹅。 如果我们想要101-200,那么我们需要再次查询,可能使用游标。

假设这是正确的,这种情况之间有什么区别

geese = Goose.all().run(batch_size=100, limit=100)
   --- and  ---
geese = Goose.all().fetch(batch_size=100, limit=100)

对于上下文:我们在生产应用程序中有很多或运行()s和一些fetch(),并且偶尔会看到截止时间异常。 我们想要抢劫他们,但是他们发现有些文件缺乏确切的截止日期。


不,你误解了最后期限是指什么。 您链接到的文档声明:

最大时间(以秒为单位)等待数据存储在中止并返回错误之前返回结果

这里的最后期限是获取结果的远程过程调用。 你花多长时间迭代它们是完全不相关的。 当然,在提取第二组时,您提到的失败是不正确的:这些是​​两个独立的呼叫,处理第一个呼叫的结果所花费的时间不会以任何方式影响第二个呼叫。

在正常情况下,RPC将在几微秒内完成,但有时可能需要等待更长时间; 例如,如果记录被事务锁定。

链接地址: http://www.djcxy.com/p/23219.html

上一篇: How is the 60s deadline applied to appengine .run and .fetch retrieval?

下一篇: High # of RPC calls in GAE, is this normal?