我有一个正在工作的芹菜花项目。现在我想要一些使用花 http api 的芹菜任务详细信息,但是当我在http://localhost:5555/api/task/info/上的花 http api 发出请求时,task_id
它返回 500 错误?
花页里一切都好。
在使用requests获取http api时,发生了一些错误!
所有步骤都遵循Flower 的文档。花日志如下:
我有一个正在工作的芹菜花项目。现在我想要一些使用花 http api 的芹菜任务详细信息,但是当我在http://localhost:5555/api/task/info/上的花 http api 发出请求时,task_id
它返回 500 错误?
花页里一切都好。
在使用requests获取http api时,发生了一些错误!
所有步骤都遵循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
类似的Task对象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,
}
在开花时,它只是将它传递给它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
函数中,如果可用或使用默认键,则将序列化委托给 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
.