Celery的基本介紹

Celery介紹

  • Celery 是一個 基於python開發的分佈式異步消息任務隊列,通過它可以輕鬆的實現任務的異步處理, 如果你的業務場景中需要用到異步任務,就可以考慮使用celery
  • 你想對100臺機器執行一條批量命令,可能會花很長時間 ,但你不想讓你的程序等着結果返回,而是給你返回 一個任務ID,你過一段時間只需要拿着這個任務id就可以拿到任務執行結果, 在任務執行ing進行時,你可以繼續做其它的事情
  • Celery 在執行任務時需要通過一個消息中間件來接收和發送任務消息,以及存儲任務結果, 一般使用rabbitMQ or Redis

Celery有以下優點

  1. 簡單:一單熟悉了celery的工作流程後,配置和使用還是比較簡單的
  2. 高可用:當任務執行失敗或執行過程中發生連接中斷,celery 會自動嘗試重新執行任務
  3. 快速:一個單進程的celery每分鐘可處理上百萬個任務
  4. 靈活: 幾乎celery的各個組件都可以被擴展及自定製

Celery基本工作流程圖  
 
user:用戶程序,用於告知celery去執行一個任務。
broker: 存放任務(依賴RabbitMQ或Redis,進行存儲)
worker:執行任務
在這裏插入圖片描述

Celery定時任務的架構    
Celery 是一個強大的分佈式任務隊列,它可以讓任務的執行完全脫離主程序,甚至可以被分配到其他主機上運行。我們通常使用它來實現異步任務( async task )和定時任務( crontab )。 異步任務比如是發送郵件、或者文件上傳, 圖像處理等等一些比較耗時的操作 ,定時任務是需要在特定時間執行的任務。它的架構組成如下圖:
在這裏插入圖片描述
任務隊列
任務隊列是一種跨線程、跨機器工作的一種機制.
任務隊列中包含稱作任務的工作單元。有專門的工作進程持續不斷的監視任務隊列,並從中獲得新的任務並處理.

任務模塊
包含異步任務和定時任務。其中,異步任務通常在業務邏輯中被觸發併發往任務隊列,而定時任務由 Celery Beat 進程週期性地將任務發往任務隊列。

消息中間件 Broker
Broker ,即爲任務調度隊列,接收任務生產者發來的消息(即任務),將任務存入隊列。 Celery 本身不提供隊列服務,官方推薦使用 RabbitMQ 和 Redis 等。

任務執行單元 Worker
Worker 是執行任務的處理單元,它實時監控消息隊列,獲取隊列中調度的任務,並執行它。

任務結果存儲 Backend
Backend 用於存儲任務的執行結果,以供查詢。同消息中間件一樣,存儲也可使用 RabbitMQ, Redis 和 MongoDB 等。

使用 Celery 實現異步任務的步驟:
(1) 創建一個 Celery 實例
(2) 啓動 Celery Worker ,通過delay() 或 apply_async()(delay 方法封裝了 apply_async, apply_async支持更多的參數 ) 將任務發佈到broker
(3) 應用程序調用異步任務
(4)存儲結果 (發佈的任務需要return纔會有結果,否則爲空)
Celery Beat:任務調度器,Beat進程會讀取配置文件的內容,週期性地將配置中到期需要執行的任務發送給任務隊列

使用 Celery 實現定時任務的步驟:
(1) 創建一個 Celery 實例
(2) 配置文件中配置任務 ,發佈任務 celery A xxx beat
(3) 啓動 Celery Worker
(4) 存儲結果

celery原理
在這裏插入圖片描述
celery應用場景

  • 異步任務
  • 發郵件、發送消息
  • 自動化工單中耗時任務
  • 所有需要異步處理的請求都可以
  • 定時任務
  • 工單系統定時獲取超時工單進行延時報警
  • 對過期會員進行清理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章