celery(超詳細)


相關概念:

  解耦:  將耗時的發短信任務邏輯從主邏輯中分離出來的動作, 讓響應不受耗時任務的影響

  生產者消費者設計模式: 最常用的解耦模式

    生產者 ==> 生成任務,消息

    消息隊列 ==> 緩存任務,消息

    消費者 ==> 執行任務,消息

  實現: 讓生產者生成發短信任務,再把任務放在消息隊列里面,最后由消費者執行任務 

1. celery簡介:

  celery 是一個簡單、靈活且可靠、處理大量消息的分布式系統,可以在一台或者多台機器上運行

  特點:單個 Celery 進程每分鍾可處理數以百萬計的任務.

  通過消息進行通信,使用消息隊列(中間人或broker)在生產者和消費者之間協調

 

2. 使用場景:

異步任務:將耗時操作任務提交給Celery去異步執行,比如發送短信/郵件、消息推送、音視頻處理等等

定時任務:定時執行某件事情,比如每天數據統計

 

3. 使用實例(短信驗證碼異步):

1)安裝 

pip install celery -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

2) 創建實例並配置:

  a.定義celery包: 在項目外層增加一個celery_tasks包或者文件夾

  b.創建celery實例:在celery_tasks中添加 main.py文件

from celery import Celery celery_app = Celery('名稱') #名稱是自己取的

  c.加載celery配置: 在celery_tasks包中添加config.py文件

在文件中指定消息隊列(中間人) 使用redis 作為中間人 broker_url = 'redis://127.0.0.1:6379/3' 使用rabbitmq 作為中間人 broker_url= 'amqp://用戶名:密碼@ip地址:5672' 示例: # 例如: # meihao: 在rabbitq中創建的用戶名, 注意: 遠端鏈接時不能使用guest賬戶. # 123456: 在rabbitq中用戶名對應的密碼 # ip部分: 指的是當前rabbitq所在的電腦ip # 5672: 是規定的端口號 broker_url = 'amqp://meihao:123456@172.16.238.128:5672'

  d. 在celery_tasks.main.py 中, 將剛剛的config配置給 celery

celery_app.config_from_object('celery_tasks.config')

  e. 定義任務:

注冊任務:在celery_tasks包下 在創建一個包名字隨意(在這里我們創建sms包)

創建好后,在里面添加一個tasks.py文件 (tasks文件名不能改)
然后再,celery_tasks.main.py報備剛剛創建的文件

#自動獲取tasks celery_app.autodiscover_tasks(['celery_tasks.sms'])

實現任務:在celery_tasks.sms.tasks.py文件中添加如下代碼:

from celery_tasks.main import celery_app @celery_app.task(name='ccp_send_sms_code') def ccp_send_sms_code(mobile, sms_code): result = CCP().send_tempalte_sms(mobile, [sms_code, 5], 1) # 這個方法需要從yuntongxun里導入 return result

注意: 真實的開發環境有可能會把 celery_tasks 單獨拿到某一個電腦上獨立執行,可以把yuntongxun 復制一份, 放到 celery_tasks 下面, 拿走的時候, 直接調用走就可以 

 

4. 可能需要的操作命令

ubuntu 啟動celery:
  celery -A celery_tasks.main worker -l info
補充celery worker的工作模式   指定進程數:
    celery worker -A proj --concurrency=4   改變進程池方式為協程方式:
    celery worker -A proj --concurrency=1000 -P evenlet -c 1000 安裝 evenlet 模塊 :
  pip install eventlet 啟用 eventlet 池:
  celery -A celery_tasks.main worker -l info -P eventlet -c 1000 windows10啟用celery:
celery -A celery_tasks.main worker -l info -P eventlet

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM