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



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

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

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

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

好的,我将把它作为一个答案。希望这能解决您的担忧。

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

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

当然,eval()有点危险,所以您可能需要使用字面eval:

import ast
args = '(5,6,7,8)' # from celery status
as_list = list(ast.literal_eval(args))

这就是我在工作流程中解析Celery参数的方式。这有点痛苦。

你愿意破解核心的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对可能评估repr有很好的评论。这取决于你的主要目标是什么。

相关内容

  • 没有找到相关文章

最新更新