gpt4 book ai didi

python - 谷歌应用引擎/python : Can I depend on Task queue retry on failure to keep insertions to a minimum?

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:30 24 4
gpt4 key购买 nike

假设我的应用程序有一个页面,人们可以在其中添加评论。假设添加每个评论后都会添加一个任务队列工作人员。因此,如果添加 100 条评论,则会进行 100 次任务队列插入。

(注意:上面是一个假设的例子来说明我的问题)

假设我想确保插入次数保持在最小值(这样我就不会遇到 10k 插入限制)

我可以做如下的事情吗?

a) 添加每个评论时,调用 taskqueue.add(name="stickytask",网址=“/废话”)- 由于这是一个命名的任务队列,如果存在同名任务队列。

b)/blah 工作 URL 读取新添加的评论,处理第一个和如果存在更多注释需要处理,则返回状态代码200 以外- 这将确保重试该任务,并且在下次尝试时将处理下一条评论等等。

因此,所有 100 条评论都通过 1 个或几个任务队列插入来处理。(注:如果有间歇在没有添加新评论并且所有评论都已删除的事件中处理过的比下一个添加的注释将导致新的任务队列插入。 )

但是,从文档(参见下面的代码片段)中它指出“系统将逐渐退缩”。这是否意味着在每个“非 200”Http返回的状态码是否延迟插入到下一次重试中?

来自文档:如果特定任务的执行失败(通过返回任何 HTTP状态代码不是 200 OK),App Engine 将尝试重试,直到它成功了。系统会逐渐后退,以免洪水泛滥您的应用程序请求过多,但重试失败每天至少完成一次任务。

最佳答案

没有理由假装失败(并导致退避和c)——这是一种老套且脆弱的安排。如果您担心简单地为每个新评论安排一个任务可能会超出任务队列当前的严格限制,那么可以在存储中“批量”处理尚未处理的评论(我想,为了潜在的加速,也可能在内存缓存中,但是,这是可选的)并且当时不要安排任何任务。

相反,让 cron 作业每分钟执行一次,这可能会处理一些评论或安排适当数量的任务来处理待处理的评论 - 当您只从一个 cron 作业安排任务时,很容易确保您每天的安排永远不会超过 10,000 个。

不要让任务队列让您忘记 cron还有一点:一个好的“类批处理”处理架构通常会同时使用 cron 作业和排队任务来简化其整体设计。

为了最大限度地提高单个请求(来自排队任务或 cron 任务)中完成的有用工作量,请考虑一种基于 monitoring 的方法。 CPU 使用率——当 CPU 是限制每个请求可以执行的工作的因素时,这可以帮助您在单个请求中尽可能多地完成尽可能多的小型可调度工作单元。我认为这种方法比等待OverQuotaError更可靠。 ,捕获它并迅速关闭,因为这可能会产生应用程序无法控制的其他后果。

关于python - 谷歌应用引擎/python : Can I depend on Task queue retry on failure to keep insertions to a minimum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com