celery 是乙個簡單、靈活且可靠的,處理大量訊息的分布式系統,並且提供維護這樣乙個系統的必需工具。它是乙個專注於實時處理的任務佇列,同時也支援任務排程。celery 是語言無關的,雖然它是用 python 實現的,但他提供了其他常見語言的介面支援。網上找到一張用得最多的圖
下面針對圖中的每一部分做解釋:
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類的例項,作用就是執行各種任務
目前,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
defadd
(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: '.format(result.get()))
執行之後可以看到
好了,恭喜你已經入門了。
分布式佇列 Celery
詳情參見 分布式佇列神器 celery 2 celery 4.1 使用者指南 task 任務 3 celery 4.1 使用者指南 calling tasks 呼叫任務 4 celery 4.1 使用者指南 canvas designing work flows 設計工作流程 5 celery 4....
分布式任務佇列Celery
celery 芹菜 是基於python開發的分布式任務佇列。它支援使用任務佇列的方式在分布的機器 程序 執行緒上執行任務排程。基本用法是在程式裡引用celery,並將函式方法繫結到task from celery import celery def add x,y return x y from t...
Celery分布式任務佇列
celery是乙個簡單 靈活且可靠的,處理大量訊息的分布式系統 專注於實時處理的非同步任務佇列 同時也支援任務排程 celery的架構由三部分組成,訊息中介軟體 message broker 任務執行單元 worker 和任務執行結果儲存 task result store 組成。訊息中介軟體 ce...