在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有很好的评论。这取决于你的主要目标是什么。