Python之celery的簡介與使用

2021-09-12 17:02:16 字數 2671 閱讀 4049

celery是乙個基於分布式訊息傳輸的非同步任務佇列,它專注於實時處理,同時也支援任務排程。它的執行單元為任務(task),利用多執行緒,如eventlet,gevent等,它們能被併發地執行在單個或多個職程伺服器(worker servers)上。任務能非同步執行(後台執行)或同步執行(等待任務完成)。

在生產系統中,celery能夠一天處理上百萬的任務。它的完整架構圖如下:

元件介紹:

在客戶端和消費者之間傳輸資料需要序列化和反序列化。 celery 支出的序列化方案如下所示:

在本文中,我們使用的celery的訊息**和後端儲存資料庫都使用redis,序列化和反序列化選擇msgpack。

首先,我們需要安裝redis資料庫,具體的安裝方法可參考: 。啟動redis,我們會看到如下介面:

在redis視覺化軟體rdm中,我們看到的資料庫如下:

裡面沒有任何資料。

接著,為了能夠在python中使用celery,我們需要安裝以下模組:

這樣,我們的準備工作就完畢了。

我們建立的工程名稱為proj,結構如下圖:

分析一下這個程式:

"from celery import celery"是匯入celery中的celery類。

接著是任務函式檔案tasks.py,**如下:

import time

def add(x, y):

time.sleep(1)

return x + y

接著是配置檔案celeryconfig.py,**如下:

broker_url = 'redis://localhost' # 使用redis作為訊息**

celery_result_backend = 'redis://localhost:6379/0' # 把任務結果存在了redis

celery_task_serializer = 'msgpack' # 任務序列化和反序列化使用msgpack方案

celery_result_serializer = 'json' # 讀取任務結果一般效能要求不高,所以使用了可讀性更好的json

celery_task_result_expires = 60 * 60 * 24 # 任務過期時間

celery_accept_content = ['json', 'msgpack'] # 指定接受的內容型別

最後是呼叫檔案diaoyong.py,**如下:

from proj.tasks import add

import time

t1 = time.time()

r1 = add.delay(1, 2)

r2 = add.delay(2, 4)

r3 = add.delay(3, 6)

r4 = add.delay(4, 8)

r5 = add.delay(5, 10)

r_list = [r1, r2, r3, r4, r5]

for r in r_list:

while not r.ready():

pass

print(r.result)

t2 = time.time()

print('共耗時:%s' % str(t2-t1))

在這個程式中,我們呼叫了add函式五次,delay()用來呼叫任務。

到此為止,我們已經理解了整個專案的結構與**。

接下來,我們嘗試著把這個專案執行起來。

首先,我們需要啟動redis。接著,切換至proj專案所在目錄,並執行命令:

介面如下:

然後,我們執行diaoyong.py,輸出的結果如下:

369

1215

共耗時:1.1370790004730225

後台輸出如下:

接著,我們看一下rdm中的資料:

celery 初步:

使用celery:

非同步神器celery:

python之celery簡單使用

參考 celery是乙個簡單 靈活和可靠的分布式任務處理系統。專注實時任務佇列,也支援任務排程。一 celery主要包括四個部分 1 任務排程者,2 中介軟體,傳遞任務 broker 常用的有redis rabbitmq 3 任務執行者 work 4 結果儲存 backend 儲存執行完成的結果,告...

使用celery之怎麼讓celery跑起來

celery 官網幫助文件 前言自從發了上次的文章使用celery之深入celery配置,有一些再問我怎麼讓celery跑起來.其實說來也是,celery在新手眼裡真的是比較重量級,不好懂,今天先讓他跑起來吧 本文大部分 和使用方法都可以在celery官網看到 我想要的效果 我想實現乙個定時任務,每...

celery學習之入門

celery 是乙個簡單 靈活且可靠的,處理大量訊息的分布式系統,並且提供維護這樣乙個系統的必需工具。它是乙個專注於實時處理的任務佇列,同時也支援任務排程。celery 是語言無關的,雖然它是用 python 實現的,但他提供了其他常見語言的介面支援。celery 結構 網上找到一張用得最多的圖 下...