gpt4 book ai didi

scheduled-tasks - 从多个队列中消费的 Celery worker 如何决定首先消费哪个?

转载 作者:行者123 更新时间:2023-12-03 11:01:51 33 4
gpt4 key购买 nike

我使用 Celery 执行异步后台任务,Redis 作为后端。我对 Celery worker 在以下情况下的行为感兴趣:

我正在使用 celeryd 作为守护进程运行一个 worker .这个worker已经被分配了两个队列通过-Q消费选项:

celeryd -E -Q queue1,queue2

worker 如何决定从哪里获取下一个要消费的任务? 它是否随机消耗来自 queue1 的任务?或 queue2 ?它会优先从 queue1 获取吗?因为它是传递给 -Q 的参数列表中的第一个?

最佳答案

根据我的测试,它处理多个队列 循环方式 .

如果我使用这个测试代码:

from celery import task
import time


@task
def my_task(item_id):
time.sleep(0.5)
print('Processing item "%s"...' % item_id)


def add_items_to_queue(queue_name, items_count):
for i in xrange(0, items_count):
my_task.apply_async(('%s-%d' % (queue_name, i),), queue=queue_name)


add_items_to_queue('queue1', 10)
add_items_to_queue('queue2', 10)
add_items_to_queue('queue3', 5)

并使用(使用 django-celery)启动队列:
`manage.py celery worker -Q queue1,queue2,queue3`

它输出:
Processing item "queue1-0"...
Processing item "queue3-0"...
Processing item "queue2-0"...
Processing item "queue1-1"...
Processing item "queue3-1"...
Processing item "queue2-1"...
Processing item "queue1-2"...
Processing item "queue3-2"...
Processing item "queue2-2"...
Processing item "queue1-3"...
Processing item "queue3-3"...
Processing item "queue2-3"...
Processing item "queue1-4"...
Processing item "queue3-4"...
Processing item "queue2-4"...
Processing item "queue1-5"...
Processing item "queue2-5"...
Processing item "queue1-6"...
Processing item "queue2-6"...
Processing item "queue1-7"...
Processing item "queue2-7"...
Processing item "queue1-8"...
Processing item "queue2-8"...
Processing item "queue1-9"...
Processing item "queue2-9"...

因此,即使所有 queue1 任务都在 queue2 和 3 任务之前发布,它在继续下一个 queue1 项目之前从每个队列中提取一个项目。

注:正如@WarLord 指出的那样,这种确切的行为仅在 CELERYD_PREFETCH_MULTIPLIER 时才有效。设置为 1。如果它大于 1,则表示将从队列中分批获取项目。因此,如果您有 4 个进程且 PREFETCH_MULTIPLIER 设置为 4,这意味着将立即从队列中拉出 16 个项目,因此您将不会获得如上的确切输出,但它仍将大致遵循循环.

关于scheduled-tasks - 从多个队列中消费的 Celery worker 如何决定首先消费哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500544/

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