天天看點

Celery 快速入門(一)

Celery 快速入門

前言:在一個應用服務中,對于時效性要求沒那麼高的業務場景,我們沒必要等到所有任務執行完才傳回結果,例如使用者注冊場景中,儲存了使用者賬号密碼之後,就可以立即傳回,後續的賬号激活郵件,可以用一種異步的形式去處理,這種異步操作可以用隊列服務來實作。否則,如果等到郵件發送成功可能幾秒過去了。

Celery 是什麼?

Celery 是 Python 語言實作的分布式隊列服務,除了支援即時任務,還支援定時任務,Celery 有5個核心角色。

1、Task

Task就是你要做的事情,也稱為任務,例如一個注冊流程裡面有很多任務,給使用者發驗證郵件就是一個任務,這種耗時任務可以交給Celery去處理,還有一種任務是定時任務,比如每天定時統計網站的注冊人數,這個也可以交給Celery周期性的處理。

2、Broker

Broker 的中文意思是經紀人,指為市場上買賣雙方提供中介服務的人。在Celery中它介于生産者和消費者之間經紀人,這個角色相當于資料結構中的隊列。例如一個Web系統中,生産者是處理核心業務的Web程式,業務中可能會産生一些耗時的任務,比如短信,生産者會将任務發送給 Broker,就是把這個任務暫時放到隊列中,等待消費者來處理。 消費者是 Worker,是專門用于執行任務的背景服務。Worker 将實時監控隊列中是否有新的任務,如果有就拿出來進行處理。Celery 本身不提供隊列服務,一般用 Redis 或者 RabbitMQ 來扮演 Broker 的角色。

3、Worker

Worker 就是那個一直在背景執行任務的人,也稱為任務的消費者,它會實時地監控隊列中有沒有任務,如果有就立即取出來執行。

4、Beat

Beat 是一個定時任務排程器,它會根據配置定時将任務發送給 Broker,等待 Worker 來消費。

5、Backend

Backend 用于儲存任務的執行結果,每個任務都有傳回值,比如發送郵件的服務會告訴我們有沒有發送成功,這個結果就是存在Backend中,當然我們并不總是要關心任務的執行結果

6、結構圖

Celery 快速入門(一)