celery筆記九之task執行結果檢視

Hunter發表於2023-05-16
本文首發於公眾號:Hunter後端
原文連結:celery筆記九之task執行結果檢視

這一篇筆記介紹一下 celery 的 task 執行之後結果的檢視。

前面我們使用的配置是這樣的:

# settings.py 

CELERY_RESULT_BACKEND = "redis://localhost/1"

是將 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

其中,container_id 為啟動的 docker 容器的 id。

進入之後,選擇第二個資料庫,可以透過檢視 keys * 命令檢視所有 key:

select 1
keys *

會輸出類似如下資料:

 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"

所有 task 執行的結果都會被冠以 celery-task-meta- 字首,後面加上的是 task_id。

因為每條資料都是儲存的 string 型別的資料,所以可以直接使用 get 命令獲取結果:

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

返回的結果會有 狀態欄位 status,函式返回結果 result,任務id task_id 等資訊。

2、使用 Django 資料庫儲存 task 結果

首先我們需要安裝一個依賴:

pip3 install django-celery-results

然後在 settings.py 的 INSTALLED_APPS 裡新增:

INSTALLED_APPS = [
    …,
    'django_celery_results',
]

透過 migrate 建立相應的表:

python3 manage.py migrate django_celery_results

執行上面的命令後,資料庫會多出三張表: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'

然後我們正常啟動 worker,然後執行一個延時任務,就可以看到在 django_celery_results_taskresult 表中多出一條資料,那就是儲存的結果:

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

除了使用 workbench,navicat 等工具檢視資料之外,我們還可以使用命令檢視 task 執行的結果:

from django_celery_results.models import TaskResult
TaskResult.objects.count()

如果想獲取更多後端相關文章,可掃碼關注閱讀:
image.png

相關文章