如果我拥有的是任务ID,我可以获得芹菜任务的参数吗?

时间:2017-03-29 12:45:32

标签: python celery

如果我有原始任务,我可以从task.request.args获取参数,但如果我只有任务ID,那么有办法获取参数吗?它似乎没有办法从AsyncResult对象中获取它们,据我所知,没有办法重新创建任务。

我想这样做,因为我有一个前端轮询后端以获取任务更新,如果它可以显示任务参数,那将非常有用。看到参数存储在代理中,这应该是可能的,至少在任务处于挂起状态时。

当然还有其他方法可以做到这一点,但这将是一种干净的做事方式。

1 个答案:

答案 0 :(得分:3)

如果任务处于暂挂状态或当前正在执行,您可以看到任务的参数。最简单的方法是使用芹菜检查方法。

from celery.task.control import inspect
i = inspect()
active_tasks = i.active()
reserved_tasks = i.reserved()
scheduled_tasks = i.scheduled()

您可以迭代它们并使用任务ID,您可以获得所有任务详细信息,如

{'acknowledged': True,
   'args': '(1000,)',
   'delivery_info': {'exchange': '',
    'priority': 0,
    'redelivered': None,
    'routing_key': 'celery'},
   'hostname': 'celery@pavilion',
   'id': '30d41ba2-3e71-49ce-8e7d-830ba1152256',
   'kwargs': '{}',
   'name': 't.wait',
   'time_start': 1007.945882783,
   'type': 't.wait',
   'worker_pid': 10560}

另外,你也可以从经纪人那里读取数据,然后解决它,你可以获得任务评估。