Почему HTTP API HTTP получить информацию о задании не работает?

У меня есть рабочий проект с цветком сельдерея. Теперь мне нужны подробности задачи сельдерея с использованием flower http api, но когда я делаю запрос на flower http api на http://localhost:5555/api/task/info/task_id это вернет 500 ошибку?

На странице цветов все в порядке.

введите описание изображения здесь

При использовании запросов для получения http api произошла ошибка!

введите описание изображения здесь

Все шаги следуют документации Цветка. Цветочная заготовка, как показано ниже: введите описание изображения здесь

1 ответ

Решение

Для цветка 0.9.2 он пытается поместить каждый атрибут task._fields в ответ:

def get(self, taskid):
    ...
    response = {}
    for name in task._fields:
        if name not in ['uuid', 'worker']:
            response[name] = getattr(task, name, None)
    response['task-id'] = task.uuid
    if task.worker is not None:
        response['worker'] = task.worker.hostname
    self.write(response)

Оказывается, есть объект задачи в task._fields лайк parent, root:

class Task(object):
    ...
    _fields = (
        ...
        'clock', 'client', 'root', 'root_id', 'parent', 'parent_id', 'children',
    )

В сельдерее эти поля имеют определенные обработчики сериализации:

self._serializer_handlers = {
    'children': self._serializable_children,
    'root': self._serializable_root,
    'parent': self._serializable_parent,
}

Находясь в цветке, он просто передает его self.write и он не знает, как сериализовать эти объекты.

Я думаю, что это было исправлено в цветке 1.0.0:

def get(self, taskid):
    ...
    response = task.as_dict()
    if task.worker is not None:
        response['worker'] = task.worker.hostname

    self.write(response)

В as_dict функция, сериализация делегируется сельдерею, если он доступен, или используйте ключи по умолчанию:

def as_dict(task):
    # as_dict is new in Celery 3.1.7
    if hasattr(Task, 'as_dict'):
        return task.as_dict()
    # old version
    else:
        return task.info(fields=task._defaults.keys())

Версия 1.0.0 все еще находится в разработке, но вы можете установить ее из git repo, запустив pip install git+https://github.com/mher/flower.git,

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