我对使用队列的任务执行感到困惑。我已经阅读了文档,我认为我理解了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个任务。我希望他们的执行分散开来。
问题是我假设在本地运行时遵循了任务执行率规则,但事实并非如此。您无法在本地测试执行率。当我部署到生产环境时,我设置的速率和桶大小按照我的预期执行。
答案 0 :(得分:7)
app_devserver不支持执行率。生产中不应出现此问题。
[由Nick Johnson和/或提问者发现的答案;在这里作为社区维基发布,所以我们有一些可以被标记接受的内容]
答案 1 :(得分:-1)
您希望将bucket_size
设置为1,否则您将会看到排队活动的“爆发”。
bucket_size
限制队列的突发性 处理,即更大的桶尺寸 允许队列中出现更大的峰值 执行率。例如,考虑一下 队列的速率为5 / s和a 桶大小为10.如果该队列有 一段时间不活动(允许 它的“令牌桶”填满了,20 任务突然排队,它会 被允许执行10个任务 立即。但在下面 第二,只能再完成5项任务 因为令牌而被执行 水桶已经耗尽了 以指定的费率重新填写 5 /秒。