> 本文首發於公眾號:Hunter後端 > 原文鏈接:[celery筆記九之task運行結果查看](https://mp.weixin.qq.com/s/QabEFiXgEOtFCI_kX-yuIg) 這一篇筆記介紹一下 celery 的 task 運行之後結果的查看。 前面我們使用的配置是這樣的: ...
本文首發於公眾號: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()
如果想獲取更多後端相關文章,可掃碼關註閱讀: