在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;
获得的参数表示。有没有办法获得序列化的任务参数?
答案 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对可能评估这个代表有好评。一切都取决于你的主要目标。