第一步操作當然是安裝:pip install celery
新建一個celery文件夾(包),包含任務,配置,主函數(啟動)文件
? ? 1. 首先編寫配置文件,如:config.py
? ??????broker_url = "redis://ip:6379/4"? ? #? ? 將任務隊列用redis存儲
? ? 2. 編寫主函數文件,如:main.py
? ??????from celery import Celery
????????import os
? ? ? ? # 如果找不到項目中的celery文件就需要配置環境變量
????????if not os.getenv('DJANGO_SETTINGS_MODULE'):
? ? ????????os.environ['DJANGO_SETTINGS_MODULE'] = 'dj31_env.settings.dev'
????????# 創建實例,這里可以不傳參數也不會出現問題
????????celery_app = Celery('sms_code')
????????# 加載配置,將配置文件中的配置信息加載
????????celery_app.config_from_object('celery.config')
????????# 注冊任務,可以提交多個任務,所以用列表類型
? ? ? ? # 將任務函數注冊
????????celery_app.autodiscover_tasks(['celery.sms'])
3. 新建sms文件夾(包)編寫任務文件,task.py
? ? # 將主函數實例化的對象導入
? ??from celery_tasks.main import celery_app
? ? # 將發送短信的接口導入
????from dj31_env.utils.yuntongxun.sms import CCP
? ? # 導入日志模塊做記錄
????import logging
????logger = logging.getLogger('django')
? ? # 用裝飾器的方法提交任務
? ? # bing=True,固定寫法
? ? # name=任務函數名
? ? # retry_backoff=間隔發送時間
????@celery_app.task(bind=True, name='send_sms_code', retry_backoff=3)
# 實現短信發送的功能
def send_sms_code(self, mobile, sms_code):
? ? ????global send_res
? ? ????try:
? ? ? ? ????send_res = CCP().send_template_sms(mobile, [sms_code, 5], 1)
? ? ????except Exception as e:
? ? ? ? ????logger.error(e)
? ? ? ????? # 有異常觸發3次
? ? ? ? ????# raise self.retry(exc=e, max_retries=3)
? ? ? ? ????raise self.retry(exc=Exception('異常信息:%s' % send_res))
? ????? if send_res !=0:
? ? ? ? ????raise self.retry(exc=Exception('發送短信失敗:%s' % send_res), max_retries=3)
? ? ????return send_res
4. 實現生產者功能
? ? # 在另外需要實現發送短信功能的文件中導入任務函數
? ? from celery.sms import?send_sms_code
? ? # 調用delay方法開啟任務,參數為send_sms_code需要傳遞的參數
????send_sms_code.delay(參數:mobile, sms_code)
5. 啟動消費者服務
? ? celery -A celery.main worker -l info
注意事項:如果出現報錯信息請參考如下鏈接解決
http://www.lxweimin.com/p/66e271dbdf2d