1,Celery是什么阴幌?
- 消息隊列勺阐,用于存放任務(wù)卷中,專注于實時處理問題。
2渊抽,Celery有什么用蟆豫?
- 主要解決耗時問題。包含的三個主體:borker用于存放任務(wù)懒闷,worker屬于工人十减、消費(fèi)者,result用于存放結(jié)果愤估。
3帮辟,Celery的優(yōu)點(diǎn)?
- 耦合性低玩焰,相當(dāng)與一個第三方插件由驹,使用方便
4,項目中如何體現(xiàn)昔园?
- 用于異步發(fā)送短信蔓榄、發(fā)郵件、圖片上傳等
使用流程:
1默刚,安裝:
pip install celery
2甥郑,根據(jù)celery官方文檔:Celery點(diǎn)擊Django-->點(diǎn)擊使用celery與django-->里面有具體的使用方法。
3荤西,新建celery_test包(根目錄下)壹若,創(chuàng)建main.py 入口函數(shù)文件
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
#1,設(shè)置環(huán)境變量(跟項目中的啟動文件環(huán)境變量相同)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
#2皂冰,創(chuàng)建celery對象(對象名可隨便起)
app = Celery('test')
app.config_from_object('celery_test.config', namespace='CELERY')
#3,注冊應(yīng)用****不要忘記
app.autodiscover_tasks(['celery_test.test.tasks'])
4,創(chuàng)建config.py配置文件(建立兩個redis庫养篓,指明存放任務(wù)庫和存放結(jié)果庫)
broker_url='redis://127.0.0.1:6379/14' #存放任務(wù)
result_backend='redis://127.0.0.1:6379/15' #存放結(jié)果
5秃流,在celery_test包內(nèi)創(chuàng)建sms包,專門用于存放發(fā)送短息的任務(wù)柳弄,發(fā)送短信的模板(發(fā)短信使用的是第三方容聯(lián)云通訊)
from celery_test.main import app
from app.libs.yuntongxun.sms import CCP
#bind: 會將第一個參數(shù)綁定到函數(shù)的第一參數(shù)舶胀,就是說參數(shù)self必填
#name: 表示任務(wù)的名稱
@app.task(bind=True,name="sms_code")
def send_sms_code(self,mobile,sms_code,time):
# import time
# time.sleep(10)
#1,發(fā)送短信
try:
ccp = CCP()
result = ccp.send_template_sms(mobile, [sms_code, time], 1)
except Exception as e:
result = -1
#2,判斷結(jié)果 (countdown:隔多久發(fā)一次,max_retries:最多發(fā)幾次碧注,exc:過期時間拋出異常)
if result == -1:
print("重試中....")
self.retry(countdown=5,max_retries=3,exc=Exception("發(fā)送短信失敗啦!!!"))
終端測試發(fā)送命令: celery -A celery_test.main worker -l info