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

2024-04-27 17:04:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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个goose时,已经过了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 

我假设这将在没有超过最后期限错误的情况下执行。是这样吗?当然,它只能找回前100只鹅。如果需要101-200,则需要再次查询,可能需要使用游标。你知道吗

假设这是正确的,在这种情况下,我们之间的区别是什么

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

对于上下文:我们在生产应用程序中有很多or run()和fetch(),偶尔会看到截止日期异常。我们想对它们进行有力的论证,但是发现the docs在如何准确地应用截止日期方面有点欠缺。你知道吗


Tags: ofruninforsizeexamplebatchfetch
1条回答
网友
1楼 · 发布于 2024-04-27 17:04:37

不,你误解了截止日期是指什么。链接到的文档说明:

Maximum time, in seconds, to wait for Datastore to return a result before aborting with an error

这里有截止日期的是获取结果的远程过程调用。你花多长时间来迭代它们是完全不相关的。当然,您在获取第二个集合时对失败的引用是不正确的:这是两个独立的调用,处理第一个调用的结果所花费的时间对第二个调用没有任何影响。你知道吗

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

相关问题 更多 >