分布式佇列Celery入門

2021-09-19 18:30:37 字數 1836 閱讀 9159

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...