1. 安裝celery模塊
pip install -U celery==4.3.0
2. 創(chuàng)建celery相關(guān)目錄
xiaolan/ # 項(xiàng)目主目錄
├── mycelery/
├── config.py # 配置文件
├── __init__.py
├── main.py # 主程序
└── sms/ # 一個(gè)目錄可以放置多個(gè)任務(wù),該目錄下存放當(dāng)前任務(wù)執(zhí)行時(shí)需要的模塊或依賴
└── tasks.py # 任務(wù)的文件,名稱必須是這個(gè)
3. 創(chuàng)建celery配置文件config.py
# 注意: 我的redis因?yàn)闆](méi)有設(shè)置密碼所有可以這樣用
# 任務(wù)隊(duì)列的鏈接地址
broker_url = 'redis://127.0.0.1:6379/15'
# 結(jié)果隊(duì)列的鏈接地址
result_backend = 'redis://127.0.0.1:6379/14'
4. 在man.py主程序中對(duì)django的配置文件進(jìn)行加載, 把django和celery進(jìn)行組合
import os
import django
from celery import Celery
# 主程序
# 創(chuàng)建celery實(shí)例對(duì)象
app = Celery("xiaolan")
# 把celery和django進(jìn)行結(jié)合, 識(shí)別和加載django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xiaolan.settings.dev')
# 對(duì)django框架進(jìn)行初始化
django.setup()
# 通過(guò)app對(duì)象加載配置
app.config_from_object("mycelery.config")
# 加載任務(wù)
# 參數(shù)必須是一個(gè)列表, 里面的每一個(gè)都是任務(wù)的路徑名稱
# 列: app.autodiscover_tasks(["任務(wù)1", "任務(wù)2"])
app.autodiscover_tasks(["mycelery.sms"])
# 啟動(dòng)Celery的命令
# 強(qiáng)烈建議切換目錄到mycelery目錄下啟動(dòng)
# celery -A main worker --loglevel=info
5. 配置tasks.py, 把注冊(cè)短信發(fā)送功能, 整合成一個(gè)任務(wù)函數(shù),代碼:
from mycelery.main import app
from .yuntongxun.sms import CCP
from xiaolan.settings import constants
import logging
from django.conf import settings
log = logging.getLogger("django")
@app.task(name="send_sms")
def send_sms(mobile, sms_code):
"""異步發(fā)送短信"""
ccp = CCP()
try:
result = ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRE//60 ], settings.SMS.get("_templateID"))
return result
except:
log.error("發(fā)送短信驗(yàn)證碼失敗!手機(jī)號(hào):%s" % mobile)
6. 把django中的短信發(fā)送模塊和相關(guān)常量配置文件直接移動(dòng)到當(dāng)前sms任務(wù)目錄中
mycelery/
├── config.py
├── __init__.py
├── main.py
└── sms/
├── __init__.py
├── tasks.py
└── yuntongxun
├── CCPRestSDK.py
├── __init__.py
├── sms.py
└── xmltojson.py
7. 在django里面, 我們調(diào)用celery來(lái)異步執(zhí)行任務(wù), 需要完成2個(gè)步驟:
# 1. 聲明一個(gè)和celery一模一樣的任務(wù)函數(shù),但是我們可以導(dǎo)包來(lái)解決
from mycelery.sms.tasks import send_sms
# 2. 調(diào)用任務(wù)函數(shù),發(fā)布任務(wù)
send_sms.delay(mobile,sms_code)
# send_sms.delay() 如果調(diào)用的任務(wù)函數(shù)沒(méi)有參數(shù),則不需要填寫任何內(nèi)容
8. 啟動(dòng)項(xiàng)目
celery -A mycelery.main worker --loglevel=info
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。