程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

如何在Django中使用Celery?

編輯:Python

最近寫了一個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")
  • views.py
from .celery_task import getcontent
def IndexView(request):
# 用celery 
getcontent.delay()
return render(request, 'test/index.html')
  • 在項目路徑下啟動,這裡主要注意一下celery5.x的啟動方式以及gevent的參數以及module安裝。
#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/


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved