如何使用参数检索挂起和执行Celery任务?

Gil*_*tes 9 python celery

在Celery文档中,有一个检查执行任务的示例:

您可以使用active()获取活动任务列表:

>>> i.active()
[{'worker1.example.com':
    [{'name': 'tasks.sleeptask',
      'id': '32666e9b-809c-41fa-8e93-5ae0c80afbbf',
      'args': '(8,)',
      'kwargs': '{}'}]}]
Run Code Online (Sandbox Code Playgroud)

但是这个调用只返回由参数获得的参数表示repr().有没有办法获得序列化的任务参数?

eco*_*omy 7

好的,我会把它作为一个答案.希望这能解决您的问题.

Celery为args提供了一个字符串.要处理它,并获得一个列表:

args = '(5,6,7,8)' # from celery status

as_list = list(eval(args))
Run Code Online (Sandbox Code Playgroud)

当然,eval()有点危险,所以你可能想要使用文字eval:

import ast

args = '(5,6,7,8)' # from celery status

as_list = list(ast.literal_eval(args))
Run Code Online (Sandbox Code Playgroud)

这就是我在工作流程中解析Celery args的方法.这有点痛.


cra*_*gts 5

你是多么愿意破解Celery核心代码?通过.active()返回的表示最终通过以下代码:https://github.com/celery/celery/blob/b1deab39aad2fdec95f48b9f6e19ca1967285544/celery/utils/saferepr.py#L68

并根据请求设置:https: //github.com/celery/celery/blob/master/celery/worker/request.py#L120

您可以修改这些函数以返回您想要的对象的任何表示...当然这样做可能会破坏其他东西.

此外,@ economy对可能评估报告的评论很好.一切都取决于你的主要目标.