Имейте в сельдерее трансляцию результатов всех рабочих

Есть ли способ получить все результаты от каждого работника в задаче 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 используя пул соединений сельдерея.

Другие вопросы по тегам