• Celery笔记九之task运行结果查看


    这一篇笔记介绍一下 celery 的 task 运行之后结果的查看。

    前面我们使用的配置是这样的:

    # settings.py 
    
    CELERY_RESULT_BACKEND = "redis://localhost/1"
    
    • 1
    • 2
    • 3

    是将 task 的运行结果保存在 redis 的第二个数据库(数据库索引从0开始)。

    我们还可以将 task 的运行结果保存到 Django 的数据库,这一篇笔记将介绍如何查看 redis 和 Django 数据库中 task 运行的结果。

    1. 查看 redis 中的 task 结果
    2. 使用 Django 数据库保存 task 结果

    1、查看 redis 中的 task 结果

    在 redis 中查看运行的结果,可以直接进入 redis 的交互界面,我这里启动 redis 是使用的 docker,所以命令如下:

    docker exec -it container_id redis-cli
    
    • 1

    其中,container_id 为启动的 docker 容器的 id。

    进入之后,选择第二个数据库,可以通过查看 keys * 命令查看所有 key:

    select 1
    keys *
    
    • 1
    • 2

    会输出类似如下数据:

     1) "celery-task-meta-5592a992-2035-49b2-9af2-3e79e50a22a1"
     2) "celery-task-meta-1fc394c2-fb2b-4a85-bcee-a27fe069ec39"
     3) "celery-task-meta-4bff6f33-7ff7-43e7-b844-719018ea1d3d"
     4) "celery-task-meta-fb582658-3eac-471e-8b68-b1248f7b8596"
    
    • 1
    • 2
    • 3
    • 4

    所有 task 运行的结果都会被冠以 celery-task-meta- 前缀,后面加上的是 task_id。

    因为每条数据都是存储的 string 类型的数据,所以可以直接使用 get 命令获取结果:

    get celery-task-meta-5592a992-2035-49b2-9af2-3e79e50a22a1
    
    • 1

    返回的结果会有 状态字段 status,函数返回结果 result,任务id task_id 等信息。

    2、使用 Django 数据库保存 task 结果

    首先我们需要安装一个依赖:

    pip3 install django-celery-results
    
    • 1

    然后在 settings.py 的 INSTALLED_APPS 里添加:

    INSTALLED_APPS = [,
        'django_celery_results',
    ]
    
    • 1
    • 2
    • 3
    • 4

    通过 migrate 创建相应的表:

    python3 manage.py migrate django_celery_results
    
    • 1

    执行上面的命令后,数据库会多出三张表:django_celery_results_chordcounter,django_celery_results_groupresult,django_celery_results_taskresult

    目前我们 task 的结果都会存储在 django_celery_results_taskresult 表中。

    修改 CELERY_RESULT_BACKEND 的值,把原来指向 redis 的去掉:

    # settings.py
    
    # CELERY_RESULT_BACKEND = "redis://localhost/1"
    CELERY_RESULT_BACKEND = 'django-db'
    
    • 1
    • 2
    • 3
    • 4

    然后我们正常启动 worker,然后执行一个延时任务,就可以看到在 django_celery_results_taskresult 表中多出一条数据,那就是保存的结果:

    from blog.tasks import add
    add.delay(1, 2)
    
    • 1
    • 2

    除了使用 workbench,navicat 等工具查看数据之外,我们还可以使用命令查看 task 运行的结果:

    from django_celery_results.models import TaskResult
    TaskResult.objects.count()
    
    • 1
    • 2

    本文首发于本人微信公众号,可搜索关注:Hunter后端

  • 相关阅读:
    1014蓝桥算法双周赛,学习算法技巧,助力蓝桥杯
    uniapp-自定义本地图标字体(1)
    Spring Task
    uni-app使用HBuilder X编辑器本地打包apk步骤说明
    同等参数中最强,在苹果15Pro上也能运行!谷歌又“卷”出了端侧小模型 Gemma 2 2B...
    线下门店为什么要做新零售?
    使用tc命令模拟linux网络延迟环境
    协程简单上手(线程切换)
    C++类和对象(前)
    ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
  • 原文地址:https://blog.csdn.net/weixin_43354181/article/details/126823207