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

时间:2015-11-24 15:20:17

标签: python celery

在Celery文档中,有example检查执行任务:

  

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

repr()

但是这个调用只返回由$cfg['Servers'][$i]['verbose'] = ''; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = '/var/run/mysqld/mysqld.sock'; $cfg['Servers'][$i]['connect_type'] = 'socket'; $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['ssl'] = true; 获得的参数表示。有没有办法获得序列化的任务参数?

2 个答案:

答案 0 :(得分:7)

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

Celery为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 args的方法。这有点痛苦。

答案 1 :(得分:5)

你是否愿意破解核心芹菜代码?通过.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对可能评估这个代表有好评。一切都取决于你的主要目标。