【问题标题】:Why AsyncResult returns NoneType after task is done?为什么 AsyncResult 在任务完成后返回 NoneType?
【发布时间】:2015-08-06 09:39:46
【问题描述】:

问题

AsyncResult 在任务完成后返回 NoneType。

问题

完成后如何获取芹菜任务状态?

说明

下面是获取 celery 任务状态的 django 视图代码。我使用此视图从我的客户端应用程序中查询任务进度。它工作正常,直到任务完成。之后 AsyncResult 每次我为我的任务调用它时都会返回 NoneType,并且我收到以下错误:

'NoneType' 对象没有属性 'get'

# Celery configuration
celery = Celery('tasks', backend='amqp', broker="amqp://")

# My django view for getting task state    
def GetTaskStatus(request):
    task = AsyncResult(request.body["taskid"], app=celery)
    if task.state == 'PENDING':
        data = {
            'state': task.state,
            'progress': task.info.get("progress", 0)
        }
    elif task.state != 'FAILURE':
        data = {
            'state': task.state,
            'progress': task.info.get("progress", 0)
        }
    else:
        data = {
            'state': task.state,
            'error': "something went wrong",
            'progress': task.info.get("progress", 0)
        }
    response = GetHttpResponseJSON(ResponseCode.OK, data)
    return response

【问题讨论】:

  • 你有没有设法解决这个问题?
  • 我遇到了同样的问题,您是否能够解决这个问题?
  • 我确定我做到了,不幸的是,很久以前我不记得如何...抱歉没有提供更多帮助。
  • @VinayKadalagi 你的任务必须返回一些东西。假设它返回一个简单的字符串:“此任务已结束”。好吧,这是你的任务结果。如果任务没有返回任何内容,您将拥有 None ,因此...NoneType。

标签: python rabbitmq django-celery


【解决方案1】:

您需要定义一个结果后端。见the tutorial

【讨论】:

  • 我的工人和队列都配置了 backend="amqp"
猜你喜欢
  • 2019-01-13
  • 2022-01-15
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2015-08-18
  • 1970-01-01
相关资源
最近更新 更多