Python 调用芹菜添加_消费者后,工作者不消费任务

Python 调用芹菜添加_消费者后,工作者不消费任务,python,rabbitmq,queue,celery,celery-task,Python,Rabbitmq,Queue,Celery,Celery Task,我想利用芹菜(RabbitMQ作为后端MQ)通过不同的队列执行不同风格的任务。一个要求是,来自特定队列的消耗(由工作人员进行)应该能够暂停和恢复 芹菜,似乎有通过调用添加消费者和取消消费者的功能。虽然我能够从队列中取消某个特定工作人员的任务消耗,但我无法通过调用add\u consumer让该工作人员恢复消耗。我猜我可能缺少了某种参数,可以在celeryconfig中提供,也可以在启动worker时通过参数提供 如果能在这方面有新的视角,那就太好了。关于add_consumer和Github,关

我想利用芹菜(RabbitMQ作为后端MQ)通过不同的队列执行不同风格的任务。一个要求是,来自特定队列的消耗(由工作人员进行)应该能够暂停和恢复

芹菜,似乎有通过调用
添加消费者
取消消费者
的功能。虽然我能够从队列中取消某个特定工作人员的任务消耗,但我无法通过调用
add\u consumer
让该工作人员恢复消耗。我猜我可能缺少了某种参数,可以在
celeryconfig
中提供,也可以在启动worker时通过参数提供

如果能在这方面有新的视角,那就太好了。关于add_consumer和Github,关于Stackoverflow的讨论不多。所以我希望这里有一些专家愿意分享他们的想法/经验

--

我正在运行以下程序:


Windows操作系统、RabbitMQ 3.5.6、Erlang 18.1、Python 3.3.5、Cellery 3.1.15要从队列恢复,您需要指定队列名称以及目标工作进程。下面是如何做到这一点

app.control.add_consumer(queue='high', destination=['celery@asus'])
这是add_消费者签名

def add_consumer(state, queue, exchange=None, exchange_type=None,
             routing_key=None, **options):
在你的情况下,你打电话的是

app.control.add_consumer('high', destination=['celery@high1woka'])

所以
high
被传递到状态,队列为空。因此,它无法恢复

要让芹菜工人在Windows操作系统中继续工作,我的工作方法如下所示

  • 更新芹菜:pip安装芹菜==4.1.0
  • 更新billiard/spawn.py:使用
    try:except:pass
  • (可选)安装eventlet:pip安装eventlet==0.22.1
  • 在中启动每个注释的工作程序时,添加
    --pool=eventlet
    --pool=solo

感谢您的尝试。我提供的复制这种行为的多文件要点是使用add_consumer。当工作进程确认add_consumer的执行时,它不会恢复队列中任务的使用。我怀疑我的celeryconfig设置不正确,或者芹菜中存在潜在的错误。@teng在添加消费者时,您是否尝试过使用
queue=high
?我用了你的要点,再现了你的行为。在通过正确的参数后,它工作正常。我添加了
queue=high
作为kwarg以添加_consumer,而不仅仅是arg,并且在执行resume.py之后,worker仍然没有消耗任务。你介意让我知道你的操作系统是什么,以及你正在使用的rabbitmq和芹菜版本吗?Ubuntu 14.04、芹菜4、rabbitmq 3.4我已经升级到芹菜4.1.0,它在Windows中不能直接“开箱即用”,但是,我能够让工作人员通过add_consumer从指定的队列中恢复使用任务。芹菜v3.1.15到v4.1之间可能有解决此问题的更新。接受这个答案。观众请注意,如果遇到此问题,请尝试将芹菜升级到v4。