worker 在调用 celery add_consumer 后不消费任务
worker does not consume tasks after celery add_consumer is called
我想利用 Celery(使用 RabbitMQ 作为后端 MQ)通过不同的队列执行不同风格的任务。一个要求是来自特定队列的(由工作人员)消费应该具有暂停和恢复的能力。
芹菜,好像有this capability via calling add_consumer
and cancel_consumer
. While I was able to cancel the consumption of tasks from a queue for a particular worker, I cannot get the worker to resume consumption by calling add_consumer
. The code to reproduce this issue is provided here。我的猜测可能是我缺少某种在 celeryconfig
中或在启动工作人员时通过参数提供的参数?
如果能对此有一些新的看法,那就太好了。 Whosebug 上关于 add_consumer 和 Github 的讨论不多。所以我希望这里有一些专家愿意分享他们的 thoughts/experience.
--
我是下面的运行:
Windows OS, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, 芹菜 3.1.15
要从队列中恢复,您需要指定队列名称以及目标工作器。这是如何做的。
app.control.add_consumer(queue='high', destination=['celery@asus'])
这是add_consumer签名
def add_consumer(state, queue, exchange=None, exchange_type=None,
routing_key=None, **options):
在你的例子中,你正在用
打电话
app.control.add_consumer('high', destination=['celery@high1woka'])
所以 high
正在传递到状态并且队列为空。所以它无法恢复。
为了让芹菜工人在 Windows OS 恢复工作,我的解决方法如下所列。
- 更新芹菜:pip 安装芹菜==4.1.0
- 更新 billiard/spawn.py : 用
try: except: pass
封装第 338 到 339 行
- (可选)安装eventlet:pip install eventlet==0.22.1
- 根据 https://github.com/celery/celery/issues/4178
中的评论启动工人时添加 --pool=eventlet
或 --pool=solo
我想利用 Celery(使用 RabbitMQ 作为后端 MQ)通过不同的队列执行不同风格的任务。一个要求是来自特定队列的(由工作人员)消费应该具有暂停和恢复的能力。
芹菜,好像有this capability via calling add_consumer
and cancel_consumer
. While I was able to cancel the consumption of tasks from a queue for a particular worker, I cannot get the worker to resume consumption by calling add_consumer
. The code to reproduce this issue is provided here。我的猜测可能是我缺少某种在 celeryconfig
中或在启动工作人员时通过参数提供的参数?
如果能对此有一些新的看法,那就太好了。 Whosebug 上关于 add_consumer 和 Github 的讨论不多。所以我希望这里有一些专家愿意分享他们的 thoughts/experience.
--
我是下面的运行:
Windows OS, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, 芹菜 3.1.15
要从队列中恢复,您需要指定队列名称以及目标工作器。这是如何做的。
app.control.add_consumer(queue='high', destination=['celery@asus'])
这是add_consumer签名
def add_consumer(state, queue, exchange=None, exchange_type=None,
routing_key=None, **options):
在你的例子中,你正在用
打电话app.control.add_consumer('high', destination=['celery@high1woka'])
所以 high
正在传递到状态并且队列为空。所以它无法恢复。
为了让芹菜工人在 Windows OS 恢复工作,我的解决方法如下所列。
- 更新芹菜:pip 安装芹菜==4.1.0
- 更新 billiard/spawn.py : 用
try: except: pass
封装第 338 到 339 行
- (可选)安装eventlet:pip install eventlet==0.22.1
- 根据 https://github.com/celery/celery/issues/4178 中的评论启动工人时添加
--pool=eventlet
或 --pool=solo