芹菜redis队列问题

时间:2017-04-17 06:06:11

标签: python redis celery

所以我使用Celery和Redis作为经纪人。这是我的配置文件

BROKER_URL = "redis://localhost:6379/0"
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_CONCURRENCY = 1000
CELERY_IGNORE_RESULT = True


CELERY_SEND_TASK_SENT_EVENT = True
CELERYD_SEND_EVENTS = True


_QS = {
    'get_queue': 'get_task',
    'put_queue': 'put_task',
    'post_queue': 'post_task',
    'delete_queue': 'delete_task'
}


CELERY_QUEUES = [
     Queue(name=key, routing_key=value) for key, value in 
     _QS.iteritems()
]

CELERY_ROUTES = {
     value: dict(queue=key) for key, value in _QS.iteritems()
}

我们的想法是为HTTP谓词设置一个单独的队列。现在我启动Celery工作人员并前往redis终端,因为我想查看每个队列的长度。

最初当工作人员启动并且没有任务排队时,redis-cli键会给出这个

 1) "celery"
 2) "_kombu.binding.celeryev"
 3) "_kombu.binding.celery.pidbox"
 4) "_kombu.binding.celery"

现在我添加一些put和get任务(分别将任务排入put_queue和get_queue的任务)。结果redis-cli键让我知道

 1) "celery"
 2) "_kombu.binding.celeryev"
 3) "unacked"
 4) "_kombu.binding.celery.pidbox"
 5) "unacked_index"
 6) "_kombu.binding.celery"

没有名为' get_queue'和put_queue。我们有2个名为unacked和unacked_index的新队列。为什么这样?我试图让不同的工作人员从不同的命名队列中消耗。但由于从未创建配置文件中指定名称的队列,因此我无法执行此操作。这是怎么回事?提前谢谢。

0 个答案:

没有答案