celery定時任務&異步任務

celery定時任務

Celery 是一個強大的分佈式任務隊列,它可以讓任務的執行完全脫離主程序,甚至可以被分配到其他主機上運行。我們通常使用它來實現異步任務( async task )和定時任務( crontab )。 異步任務比如是發送郵件、或者文件上傳, 圖像處理等等一些比較耗時的操作 ,定時任務是需要在特定時間執行的任務。它的架構組成如下圖:
在這裏插入圖片描述

任務隊列
任務隊列是一種跨線程、跨機器工作的一種機制.
任務隊列中包含稱作任務的工作單元。有專門的工作進程持續不斷的監視任務隊列,並從中獲得新的任務並處理.

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

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

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

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

Celery Beat
任務調度器,Beat進程會讀取配置文件的內容,週期性地將配置中到期需要執行的任務發送給任務隊列

使用 Celery 實現異步任務的步驟:
(1) 創建一個 Celery 實例
(2) 啓動 Celery Worker ,通過delay() 或 apply_async()(delay 方法封裝了 apply_async, apply_async支持更多的參數 ) 將任務發佈到broker
(3) 應用程序調用異步任務
(4)存儲結果 (發佈的任務需要return纔會有結果,否則爲空)

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

Celery使用詳情鏈接於此

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章