Имейте в сельдерее трансляцию результатов всех рабочих
Есть ли способ получить все результаты от каждого работника в задаче Celery Broadcast? Я хотел бы контролировать, если все работало хорошо. Список работников, которым было отправлено задание, также приветствуется.
1 ответ
Решение
Нет, это не легко возможно.
Но вам не нужно ограничивать себя встроенным бэкэндом результатов 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
используя пул соединений сельдерея.