有没有办法在Celery Broadcast任务中获得每个工作人员的所有结果?我想监控所有工人的一切是否正常。发送任务的工作人员名单也将受到赞赏。
答案 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
经纪人连接池。