如何从`django_celery_results`中的`TaskResult`模型加载`task_kwargs`?

问题描述 投票:0回答:2

我正在使用

django_celery_results
来保存一些 celery 任务的结果。每个任务都获取
kwargs
作为输入,最后保存在
task_kwargs
TaskResult
字段中。

我稍后无法从它们保存在数据库中的方式加载这些

kwargs
。例如,这是一个条目:

"{'config_file_path': '/path/to/configs/some_config.json'}"

访问字段值的简单示例:

tkwargs = TaskResult.objects.get(id=1).task_kwargs

为此我得到了上面的字符串。

task_kwargs
作为 python 字典而不是该字符串获取的直接方法是什么?

django celery celerybeat
2个回答
2
投票

这就是我所拥有的:

args = json.loads(task.task_kwargs)
if isinstance(args, str):
    args = args.replace("'", '"')
    args = json.loads(args)

不漂亮,但有效。


0
投票

希望这个包能更容易实现(为什么它们不从模型中反序列化?):

recent_tasks = TaskResult.objects.order_by('-date_done')[:10]
tasks_list = [
    {
        'task_id': task.task_id,
        'task_name': task.task_name,
        'task_args': json.loads((task.task_args or "null").replace("()", "null").replace('"null"', 'null')),
        'task_kwargs': json.loads((json.loads(task.task_kwargs or 'null') or "null").replace("'", '"')),
        'status': task.status,
        'result': json.loads(task.result),
        'date_created': task.date_created,
        'date_done': task.date_done,
        'meta': json.loads(task.meta),
        'worker': task.worker,
        'traceback': task.traceback,
    }
    for task in recent_tasks
]
© www.soinside.com 2019 - 2024. All rights reserved.