Дополнительные метаданные о сельдерее «НЕИСПРАВНОСТЬ» - PullRequest
0 голосов
/ 04 сентября 2018

Можно ли отправить дополнительные метаданные с состоянием сельдерея «НЕИСПРАВНОСТЬ»?

В настоящее время я нахожу возможным только отправлять данные об исключениях и ничего больше. В идеале я хотел бы отправить с ним массив дополнительной информации, которая может быть получена моим веб-интерфейсом.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

На самом деле, углубившись в это, я нашел способ добиться этого:

Есть несколько хитростей:

  1. установить состояние задачи с помощью update_state

  2. убедитесь, что аргумент meta соответствует тому, что ожидает Celery для состояния FAILURE

  3. поручить Celery удалить сообщение из очереди, но отключить запись состояния внутренней задачи Celery с помощью Ignore()

Например:

from celery import states
from celery.exceptions import Ignore

@app.task(bind=True)
def task(self):
    try:
        raise ValueError('Some error')
    except Exception as ex:
        self.update_state(
            state=states.FAILURE,
            meta={
                'exc_type': type(ex).__name__,
                'exc_message': traceback.format_exc().split('\n')
                'custom': '...'
            })
        raise Ignore()

При получении AsyncResult дополнительные пользовательские данные доступны через task.backend.get() вызов:

task = tasks.task.s().delay()
meta = task.backend.get(task.backend.get_key_for_task(task.id))
json.loads(meta.decode('utf8'))['result']['custom']

Если вам нужна дополнительная справочная информация, я написал об этом в блоге: https://www.distributedpython.com/2018/09/28/celery-task-states - спасибо за вдохновение; -)

0 голосов
/ 04 сентября 2018

Я так не думаю. Однако вы можете получить доступ к свойству traceback задачи, чтобы получить трассировку стека, это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...