Celery介绍和使用
目錄
1.為什么使用Celery?
2. Celery介紹
3. 創建Celery實例并加載配置
4. 定義發送短信任務
5.啟動Celery服務
6. 調用發送短信任務
1.為什么使用Celery?
- 消費者取到消息之后,要消費掉(執行任務),需要我們去實現。
- 任務可能出現高并發的情況,需要補充多任務的方式執行。
- 耗時任務很多種,每種耗時任務編寫的生產者和消費者代碼有重復。
- 取到的消息什么時候執行,以什么樣的方式執行。
結論:
- 實際開發中,我們可以借助成熟的工具Celery來完成。
- 有了Celery,我們在使用生產者消費者模式時,只需要關注任務本身,極大的簡化了程序員的開發流程。
2. Celery介紹
-
Celery介紹:
- 一個簡單、靈活且可靠、處理大量消息的分布式系統,可以在一臺或者多臺機器上運行。
- 單個 Celery 進程每分鐘可處理數以百萬計的任務。
- 通過消息進行通信,使用消息隊列(broker)在客戶端和消費者之間進行協調。
-
安裝Celery:
$ pip install -U Celery -
Celery官方文檔
3. 創建Celery實例并加載配置
1.定義Celery包(在主業務邏輯包的同級目錄下,新建名字為celery_tasks的包)
2.創建Celery實例(在新建的包下面新建py文件main.py)
?main.py里面編寫創建實例的代碼
# celery啟動文件 from celery import Celery# 創建celery實例 celery_app = Celery('實例名稱')3.加載Celery配置(新建一個config.py的文件,來編寫配置)
? config.py里面添加配置的代碼?
# Celery的配置文件# 指定中間人、消息隊列、任務隊列、容器,使用redis broker_url = "redis://192.168.174.129/10"?加載celery的配置(除了實例名稱,其他都是固定寫法)
# celery啟動文件 from celery import Celery# 創建celery實例 celery_app = Celery('實例名稱') # 加載celery配置 celery_app.config_from_object('celery_tasks.config')4. 定義發送短信任務
創建發送短信的任務,(例如創建一個sms的包,任務名為tasks.py(固定的))
4.1.注冊任務:在main.py下面編寫代碼
# celery啟動文件 from celery import Celery# 創建celery實例 celery_app = Celery('meiduo') # 加載celery配置 celery_app.config_from_object('celery_tasks.config') # 自動注冊celery任務 celery_app.autodiscover_tasks(['celery_tasks.sms'])4.2.定義任務:在tasks.py?里面編寫定義任務的代碼
注:裝飾器中的name可以自己定義,最好和本任務有關系.(一般和函數名相對應)
將需要使用的celery的代碼,放到編寫的函數里面,如果該原來該代碼有參數,則還是原樣給定義的函數加上參數
from celery_tasks.main import celery_app # bind:保證task對象會作為第一個參數自動傳入 # name:異步任務別名 # retry_backoff:異常自動重試的時間間隔 第n次(retry_backoff×2^(n-1))s # max_retries:異常自動重試次數的上限 @celery_app.task(bind=True, name='ccp_send_sms_code', retry_backoff=3) # 使用裝飾器裝飾異步任務,保證celery識別任務 @celery_app.task(name='send_sms_code') # name就是給任務起個別名 def send_sms_code(mobile, sms_code):"""發送短信驗證碼:param mobile: 手機號:param sms_code: 短信驗證碼:return: 成功:0 失敗:-1"""send_ret = CCP().send_template_sms("*******", "*****", mobile, sms_code)return send_ret5.啟動Celery服務
進入到最初創建的celery_tasks的包的路徑下,輸入命令啟動Celery服務
celery -A celery_tasks.main worker -l info- -A指對應的應用程序, 其參數是項目中 Celery實例的位置。
- worker指這里要啟動的worker。
- -l指日志等級,比如info等級。
?運行后可以到,[tasks]?的下面就由我們剛才定義的任務? send_sms_code?
6. 調用發送短信任務
使用celery異步發送短信驗證碼代替原來的代碼,導入定義的任務調用delay()函數
from celery_tasks.sms.tasks import send_sms_code# 使用Celery發送驗證碼 send_sms_code.delay(mobile, sms_code) # 固定的寫法,調用delay總結
以上是生活随笔為你收集整理的Celery介绍和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django中pipeline操作Red
- 下一篇: Pandas的学习(读取mongodb数