最近寫了一個Django項目,碰巧有個數據獲取的功能延遲特別大(30s左右),嚴重影響用戶的浏覽體驗,就想到了去嘗試用celery解決。怎麼說呢?會者不難,難者不會。這東西最初感覺挺簡單的,搞了兩天各種error,就找了一個視頻系統的學習了一下,emmm還是有error。我這裡主要是想通過Model來存數據,各種class引用報錯,如果還不能解決的話都想過直接操作MySQL來寫庫了。
https://www.emperinter.info/2022/06/15/how-to-use-celery-in-django/
我這裡主要先說一下一個文件的使用方式吧,當然也可以搞一個類把task和配置文件等等分開盡量解耦,後續維護更方便。消息中間件選用的是Redis,當然你也可以選用mq等等。
models.py
同目錄創建celery_task.py
,我這裡主要是一個異步,定時任務的話也差不多。內容如下,主要注意的是django的引用以及models的引用。from celery import Celery
import time
import os
import django
# 注意Project換成自己的項目名稱
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Project.settings')
django.setup()
from test.models import article
backend='redis://127.0.0.1:6379/1' # 數據庫存儲異步結果
broker='redis://127.0.0.1:6379/2' # 消息中間件(0-16個,其中選一個)
cel=Celery('test',backend=backend,broker=broker) # ’test‘ celery的一個名字
@cel.task()
def getcontent():
article.objects.create(description ="description", content = "content")
from .celery_task import getcontent
def IndexView(request):
# 用celery
getcontent.delay()
return render(request, 'test/index.html')
#celery5.x 啟動
#celery --app test.celery_task worker -l info -P gevent
celery worker -A test.celery_task -l info -P gevent
https://www.emperinter.info/2022/06/15/how-to-use-celery-in-django/