Python--Django使用celery實現非同步任務
阿新 • • 發佈:2018-11-09
Django使用celery實現非同步任務
celery使用: 以傳送簡訊為例
- 在專案目錄下下建立celery_tasks用於儲存celery非同步任務。
- 在celery_tasks目錄下建立config.py檔案,用於儲存celery的配置資訊
# redis儲存
broker_url = "redis://127.0.0.1/14"
- 在celery_tasks目錄下建立main.py檔案,用於作為celery的啟動檔案
from celery import Celery
# 為celery使用django配置檔案進行設定
import os
# xiamgmu.settings.dev表示專案的配置檔案路徑
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = 'xiamgmu.settings.dev'
# 建立celery應用 name表示應用名
app = Celery('name')
# 匯入celery配置
app.config_from_object('celery_tasks.config')
# 自動註冊celery任務
app.autodiscover_tasks(['celery_tasks.sms' ])
# 下面指令用於啟動celery
# celery -A celery_tasks.main worker -l info
- 在celery_tasks目錄下建立sms資料夾,實現傳送簡訊的方法
- 在sms資料夾下建立tasks.py檔案
from libs.yuntongxun.sms import CCP
from celery_tasks.main import app
# CCP使用雲通訊傳送
@app.task(name='send_sms_code')
def send_sms_code(mobile, sms_code):
ccp = CCP()
# '1'表示有效時間1分鐘,1表示模板1
ccp.send_template_sms(mobile, [sms_code, '1'], 1)
- 配置完成在檢視view中可以呼叫send_sms_code方法並傳參
使用celery解決可能由於網路延時問題造成的堵塞,實現非同步任務