本文首發於公眾號:Hunter後端
原文連結:celery筆記九之task執行結果檢視
這一篇筆記介紹一下 celery 的 task 執行之後結果的檢視。
前面我們使用的配置是這樣的:
# settings.py
CELERY_RESULT_BACKEND = "redis://localhost/1"
是將 task 的執行結果儲存在 redis 的第二個資料庫(資料庫索引從0開始)。
我們還可以將 task 的執行結果儲存到 Django 的資料庫,這一篇筆記將介紹如何檢視 redis 和 Django 資料庫中 task 執行的結果。
- 檢視 redis 中的 task 結果
- 使用 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()
如果想獲取更多後端相關文章,可掃碼關注閱讀: