我想利用Celery(以RabbitMQ作为后端MQ(通过不同的队列执行不同风格的任务。 一个要求是(由工作线程(从特定队列使用应该能够暂停和恢复。
芹菜,似乎通过调用add_consumer
和cancel_consumer
来具有这种能力。 虽然我能够取消特定工作人员队列中的任务消耗,但我无法通过调用add_consumer
让工作线程恢复消耗。此处提供了重现此问题的代码。 我的猜测可能是我缺少某种参数,可以在celeryconfig
中或通过启动工人时的参数提供?
如果能对此有几双新鲜的眼睛,那就太好了。 关于 Stackoverflow 的 add_consumer 和 Github 都没有太多讨论。 所以我希望这里有一些专家愿意分享他们的想法/经验。
--
我正在运行以下内容:
Windows OS, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, celery 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操作系统中的工作,下面列出了我的解决方法。
- 更新芹菜:点子安装芹菜==4.1.0
- 更新台球/生成.py:带
try: except: pass
的 338 至 339 行 - (可选(安装事件:pip 安装事件let==0.22.1
- 在 https://github.com/celery/celery/issues/4178 中根据注释启动辅助角色时添加
--pool=eventlet
或--pool=solo