Python學習-九週二次課(12月19日)

九週二次課(12月19日)
17.1 celery簡介
17.2 celery小例子python

 

Celery 是什麼?git

Celery 是一個由 Python 編寫的簡單、靈活、可靠的用來處理大量信息的分佈式系統,它同時提供操做和維護分佈式系統所需的工具。github

Celery 專一於實時任務處理,支持任務調度。redis

說白了,它是一個分佈式隊列的管理工具,咱們能夠用 Celery 提供的接口快速實現並管理一個分佈式的任務隊列。app

首先,咱們要理解 Celery 自己不是任務隊列,它是管理分佈式任務隊列的工具,或者換一種說法,它封裝好了操做常見任務隊列的各類操做,咱們用它能夠快速進行任務隊列的使用與管理,固然你也能夠本身看 rabbitmq 等隊列的文檔而後本身實現相關操做都是沒有問題的。異步

Celery 是語言無關的,雖然它是用 Python 實現的,但他提供了其餘常見語言的接口支持。只是若是你剛好使用 Python 進行開發那麼使用 Celery 就天然而然了。分佈式

想讓 Celery 運行起來咱們要明白幾個概念:函數

1.1 Brokers

brokers 中文意思爲中間人,在這裏就是指任務隊列自己,Celery 扮演生產者和消費者的角色,brokers 就是生產者和消費者存放/拿取產品的地方(隊列)工具

常見的 brokers 有 rabbitmq、redis、Zookeeper 等spa

1.2 Result Stores / backend

顧名思義就是結果儲存的地方,隊列中的任務運行完後的結果或者狀態須要被任務發送者知道,那麼就須要一個地方儲存這些結果,就是 Result Stores 了

常見的 backend 有 redis、Memcached 甚至經常使用的數據均可以。

1.3 Workers

就是 Celery 中的工做者,相似與生產/消費模型中的消費者,其從隊列中取出任務並執行

1.4 Tasks

就是咱們想在隊列中進行的任務咯,通常由用戶、觸發器或其餘操做將任務入隊,而後交由 workers 進行處理。

理解以上概念後咱們就能夠快速實現一個隊列的操做:

這裏咱們用 redis 當作 celery 的 broker 和 backend。

(其餘 brokers 與 backend 支持看這裏)

安裝 Celery 和 redis 以及 python 的 redis 支持:

 

 

 

這裏須要注意若是你的 celery 是 4.0 及以上版本請確保 python 的 redis 庫版本在 2.10.4 及以上,不然會出現 redis 鏈接 timeout 的錯誤,具體參考

而後,咱們須要寫一個task:

 

 

 

 

OK,到這裏,broker 咱們有了,backend 咱們有了,task 咱們也有了,如今就該運行 worker 進行工做了,在 tasks.py 所在目錄下運行:

 

意思就是運行 tasks 這個任務集合的 worker 進行工做(固然此時broker中尚未任務,worker此時至關於待命狀態)

最後一步,就是觸發任務啦,最簡單方式就是再寫一個腳本而後調用那個被裝飾成 task 的函數:

 

 

 

運行此腳本

delay 返回的是一個 AsyncResult 對象,裏面存的就是一個異步的結果,當任務完成時result.ready() 爲 true,而後用 result.get() 取結果便可。

到此,一個簡單的 celery 應用就完成啦。

相關文章
相關標籤/搜索