Google App Engine 任务队列是如何工作的?
我对使用队列执行任务有点困惑。我看过文档,原以为我理解了“bucket_size”(桶大小)和“rate”(速率),但是当我把20个任务发送到设置为每小时5个、大小为5的队列时,所有20个任务却是一个接一个地尽快执行,最后在不到1分钟内就完成了。
deferred.defer(spam.cookEggs,
egg_keys,
_queue="tortoise")
- name: tortoise
rate: 5/h
bucket_size: 5
我想要的是,无论我创建10个还是100个任务,我只希望每小时运行5个任务。所以20个任务大约需要4个小时才能完成。我希望它们的执行时间能够分散开来。
更新
问题在于,我以为在本地运行时会遵循任务执行速率的规则,但事实并非如此。你无法在本地测试执行速率。当我部署到生产环境时,我设置的速率和桶大小就按我预期的那样执行了。
2 个回答
-1
你想把 bucket_size
设置为 1,不然你会看到像之前那样的“突发”排队活动。
根据文档:
bucket_size
这个设置限制了队列处理的突发性,也就是说,设置一个更大的 bucket_size 会让队列的执行速度出现更大的波动。举个例子,假设一个队列的处理速度是每秒5个任务,bucket_size是10。如果这个队列有一段时间没有活动(这时候它的“令牌桶”会慢慢填满),然后突然有20个任务被加入队列,它会立即执行10个任务。但是在接下来的那一秒里,只能再执行5个任务,因为令牌桶已经用完了,它会按照每秒5个的速度重新填充。
7
应用开发服务器不会遵循执行速度的设置。这个问题在正式环境中是不会出现的。
[这个回答是由Nick Johnson和/或提问者发现的;在这里以社区维基的形式发布,这样我们就有了可以被标记为接受的内容]