为什么 flower 的 HTTP API 获取任务信息不起作用?
Why flower's HTTP API get task info not work?
我有一个有效的芹菜花项目。
现在我想要一些使用 flower http api 的芹菜任务详细信息,但是当我在 http://localhost:5555/api/task/info/task_id
上的 flower http api 发出请求时,它 return 500 错误?
花页一切正常。
使用请求获取 http api 时发生错误!
遵循所有步骤Flower's documentation。 Flower 日志记录如下:
对于 flower 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',
)
在 celery 中,这些字段具有特定的序列化处理程序:
self._serializer_handlers = {
'children': self._serializable_children,
'root': self._serializable_root,
'parent': self._serializable_parent,
}
在 flower 中,它只是将它传递给 self.write
,它不知道如何序列化这些对象。
我认为它已在 flower 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
函数中,序列化委托给 celery(如果可用)或使用默认键:
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 仍在开发中,但您可以通过 运行 pip install git+https://github.com/mher/flower.git
.
从 git 存储库安装它
我有一个有效的芹菜花项目。
现在我想要一些使用 flower http api 的芹菜任务详细信息,但是当我在 http://localhost:5555/api/task/info/task_id
上的 flower http api 发出请求时,它 return 500 错误?
花页一切正常。
使用请求获取 http api 时发生错误!
遵循所有步骤Flower's documentation。 Flower 日志记录如下:
对于 flower 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',
)
在 celery 中,这些字段具有特定的序列化处理程序:
self._serializer_handlers = {
'children': self._serializable_children,
'root': self._serializable_root,
'parent': self._serializable_parent,
}
在 flower 中,它只是将它传递给 self.write
,它不知道如何序列化这些对象。
我认为它已在 flower 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
函数中,序列化委托给 celery(如果可用)或使用默认键:
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 仍在开发中,但您可以通过 运行 pip install git+https://github.com/mher/flower.git
.