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接著是配置檔案celeryconfig.py,**如下:def add(x, y):
time.sleep(1)
return x + y
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 結構 網上找到一張用得最多的圖 下...