【问题标题】:How do Google App Engine Task Queues work?Google App Engine 任务队列如何工作?
【发布时间】:2011-06-24 11:10:55
【问题描述】:

我对使用队列执行任务感到困惑。我已经阅读了文档,我以为我理解了 bucket_size 和 rate,但是当我将 20 个任务发送到一个设置为 5/h、大小为 5 的队列时,所有 20 个任务会尽快一个接一个地执行,不到1 分钟。

deferred.defer(spam.cookEggs, 
               egg_keys, 
               _queue="tortoise")  

- name: tortoise
  rate: 5/h  
  bucket_size: 5  

我想要的是创建 10 个还是 100 个任务,我只希望每小时运行 5 个。因此,完成 20 个任务大约需要 4 小时。我希望他们的处决分散开来。

更新

问题是我假设在本地运行时,遵循了任务执行率规则,但事实并非如此。您无法在本地测试执行率。当我部署到生产环境时,我设置的速率和存储桶大小按预期执行。

【问题讨论】:

  • 所以你是说我应该改用计划任务?
  • 这是在生产中还是在 dev_appserver 中?我不相信 dev_appserver 尊重执行率。
  • 您能以对他人有所帮助的方式回答您自己的问题吗?如果你这样做,你可以选择你的作为正确答案。这可能看起来很奇怪,但在这种情况下最好不要删除。
  • 您应该将您的答案发布为答案并将其标记为已接受。所以其他 SO 用户可以告诉你问题已经得到解答。

标签: python google-app-engine queue task


【解决方案1】:

app_devserver 不遵守执行率。生产中不应出现此问题。

[Nick Johnson 和/或问题作者发现的答案;在这里作为社区 wiki 发布,以便我们可以标记为接受的内容]

【讨论】:

    【解决方案2】:

    您希望将 bucket_size 设置为 1,否则您将像在此处看到的那样“爆发”排队活动。

    来自documentation

    bucket_size

    限制队列的突发性 处理,即更高的桶大小 允许队列中出现更大的尖峰 执行率。例如,考虑 一个速率为 5/s 的队列和一个 桶大小为 10。如果该队列有 一段时间不活动(允许 它的“令牌桶”要填满),以及 20 任务突然排队,它会 允许执行10个任务 立即地。但在下面 其次,只有5个以上的任务将能够 被执行,因为令牌 桶已用完并且是 以指定的速率重新填充 5/s。

    【讨论】:

    • 我确实读过几次,对我来说,如果我的速率为 5/h,存储桶大小为 5,那么 5 个任务将立即运行,但随后需要一个小时,还有 5 个令牌填满桶,所以 5 个任务将在那个小时内运行,依此类推。但我看到的是所有 20 个任务都在立即运行,一个接一个。
    • 当我将 bucket_size 设置为 1 时,据我所知,它以相同的速度执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2019-02-24
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多