Celery 是一個簡單、靈活且可靠的,處理大量消息的分布式系統,并且提供維護這樣一個系統的必需工具。它是一個專注于實時處理的任務隊列,同時也支援任務排程。Celery 是語言無關的,雖然它是用 Python 實作的,但他提供了其他常見語言的接口支援。
Celery 結構
網上找到一張用得最多的圖

下面針對圖中的每一部分做解釋:
Celery的架構由三部分組成,消息中間件(message broker),任務執行單元(worker)和任務執行結果存儲(task result store)組成。
消息中間件(broker)
一個消息傳輸的中間件。每當應用程式調用celery的異步任務的時候,會向broker傳遞消息,而後celery的worker将會取到消息,執行相應程式。也就是消費者和生産者之間的橋梁,
另外Celery 本身不提供隊列服務,官方推薦使用 RabbitMQ 和 Redis 等。
連接配接字元串:
RabiitMQ使用amqp://localhost
Redis使用redis://localhost
任務執行結果存儲(backend)
backend: 用于存儲這些消息以及celery執行的一些消息和結果,以此用來确認對方是否接受了。
任務執行單元(worker)
worker: Celery類的執行個體,作用就是執行各種任務
Celery 安裝
目前,Windows使用celery隻能安裝 3.1.25版,linux就可以安裝4.0以上的了,這裡以Windows為例。
安裝
pip install celery==3.1.25
先來一個簡單例子
使用官網上的例子,然後把broker的資訊改好,這裡我們使用redis
首先在D:\CeleryDemo建立一個檔案叫task.py輸入以下代碼。在輸入之前確定redis服務是啟動的。
from celery import Celery
app = Celery('tasks', backend='redis://localhost:6379/0', broker='redis://localhost:6379/0') #配置好celery的backend和broker
@app.task #普通函數裝飾為 celery task
def add(x, y):
return x + y
通過上面簡單的代碼broker 我們有了,backend 我們有了,task 我們也有了,現在就該運作 worker 進行工作了,在 task.py 所在目錄下運作:
celery -A task worker --loglevel=info
意思就是運作 task 這個任務集合的 worker 進行工作(當然此時broker中還沒有任務,worker此時相當于待命狀态)
最後一步,觸發任務,最簡單方式就是在task.py所在目錄下寫一個trigger.py調用被裝飾成 task 的函數:
from task import add
import time
result = add.delay(4, 4) #不要直接 add(4, 4),這裡需要用 celery 提供的接口 delay 進行調用
while not result.ready():
time.sleep(1)
print ('task done: {0}'.format(result.get()))
運作之後可以看到
好了,恭喜你已經入門了。