appengine声明.run() .fetch()的默认截止日期是60秒。我想确切地了解这个截止日期是如何应用的,特别是在任务或cron作业的上下文中,在那里,整个进程可以运行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秒将过去,但这并不重要,因为所有100个结果都是在调用.run时检索到的。在第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/o,超过了错误的最后期限。是那么回事吗?当然,它只会找回前100只鹅。如果我们需要101-200,那么我们需要再次查询,可能需要使用游标。
假设这是正确的,在这种情况下有什么区别
geese = Goose.all().run(batch_size=100, limit=100)
--- and ---
geese = Goose.all().fetch(batch_size=100, limit=100)上下文:我们在生产应用程序中有很多或run()s,还有一些fetch(),偶尔也会看到最后期限的例外情况。我们想要对它们进行罗列,但我们发现医生们在具体的截止日期应用方面有一点欠缺。
发布于 2014-12-23 12:49:02
不,你误解了最后期限指的是什么。您链接到的文档状态:
等待Datastore返回结果的最长时间(以秒为单位),然后使用错误中止
这里有最后期限的是获取结果的远程过程调用。你需要多长时间来迭代它们是完全不相关的。当然,在获取第二个集合时对失败的引用是不正确的:这是两个单独的调用,处理第一个调用的结果所花费的时间不会以任何方式影响第二个调用。
在正常情况下,RPC将在微秒内完成,但在某些情况下,它可能需要等待更长的时间;例如,如果记录被事务锁定。
https://stackoverflow.com/questions/27620365
复制相似问题