让芹菜广播所有工人的回报结果

时间:2013-04-02 13:38:04

标签: python celery celery-task

有没有办法在Celery Broadcast任务中获得每个工作人员的所有结果?我想监控所有工人的一切是否正常。发送任务的工作人员名单也将受到赞赏。

1 个答案:

答案 0 :(得分:6)

不,这不容易。

但是您不必将自己限制在内置的amqp结果后端, 你可以使用Kombu(http://kombu.readthedocs.org)发送你自己的结果, 这是Celery使用的消息传递库:

from celery import Celery
from kombu import Exchange

results_exchange = Exchange('myres', type='fanout')

app = Celery()

@app.task(ignore_result=True)
def something():
    res = do_something()
    with app.producer_or_acquire(block=True) as producer:
        producer.send(
            {'result': res},
            exchange=results_exchange,
            serializer='json',
            declare=[results_exchange],
        )

producer_or_acquire将使用芹菜创建一个新的kombu.Producer 经纪人连接池。