Google App Engine任务队列如何运作?

时间:2011-02-09 21:44:55

标签: python google-app-engine queue task

我对使用队列的任务执行感到困惑。我已经阅读了文档,我认为我理解了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个任务。所以完成需要大约4个小时的20个任务。我希望他们的执行分散开来。

更新

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

2 个答案:

答案 0 :(得分:7)

app_devserver不支持执行率。生产中不应出现此问题。

[由Nick Johnson和/或提问者发现的答案;在这里作为社区维基发布,所以我们有一些可以被标记接受的内容]

答案 1 :(得分:-1)

您希望将bucket_size设置为1,否则您将会看到排队活动的“爆发”。

来自documentation

  

bucket_size

     

限制队列的突发性   处理,即更大的桶尺寸   允许队列中出现更大的峰值   执行率。例如,考虑一下   队列的速率为5 / s和a   桶大小为10.如果该队列有   一段时间不活动(允许   它的“令牌桶”填满了,20   任务突然排队,它会   被允许执行10个任务   立即。但在下面   第二,只能再完成5项任务   因为令牌而被执行   水桶已经耗尽了   以指定的费率重新填写   5 /秒。