celery 任務隊列 + redis
Celery 是一個“自帶電池”的的任務隊列。它易於使用,所以你可以無視其所解決問題的復雜程度而輕松入門。它遵照最佳實踐設計,所以你的產品可以擴展,或與其他語言集成,並且它自帶了在生產環境中運行這樣一個系統所需的工具和支持。
在此教程中,你會了解使用 Celery 的最基礎部分。包括:
- 選擇和安裝消息傳輸方式(中間人)。
- 安裝 Celery 並創建第一個任務
- 運行職程並調用任務。
- 追蹤任務在不同狀態間的遷移,並檢視返回值。
選擇中間人
Celery 需要一個發送和接收消息的解決方案,其通常以獨立服務形式出現, 稱為 消息中間人 。
在此介紹redis數據庫 安裝數據庫請看另一篇文章:https://www.cnblogs.com/wbdream/p/10581310.html
安裝celery:
安裝celery接口: pip3 install celery
應用:
首先你需要一個 Celery 實例,稱為 Celery 應用或直接簡稱應用。既然這個實例用於你想在 Celery 中做一切事——比如創建任務、管理職程——的入口點,它必須可以被其他模塊導入。
在此教程中,你的一切都容納在單一模塊裏,對於更大的項目,你會想創建 獨立模塊 。
讓我們創建 tasks.py :
from celery import Celery app = Celery(‘tasks‘, broker=‘redis://:password@localhost//‘) @app.task def add(x, y): return x + y
Celery 的第一個參數是當前模塊的名稱,這個參數是必須的,這樣的話名稱可以自動生成。第二個參數是中間人關鍵字參數,指定你所使用的消息中間人的 URL,此處使用了 RabbitMQ,也是默認的選項。更多可選的中間人見上面的 選擇中間人 一節。例如,對於 RabbitMQ 你可以寫 amqp://localhost ,而對於 Redis 你可以寫 redis://localhost .
你現在可以用 worker 參數執行我們的程序:
$ celery -A tasks worker -l debug # -l debug 日誌級別
調用任務
你可以用 delay() 方法來調用任務。
這是 apply_async() 方法的快捷方式,該方法允許你更好地控制任務執行(見 Calling Tasks ):
>>> from tasks import add
>>> res = add.delay(4, 4)
>>> res.get() #獲取結構
ready() 方法查看任務是否完成處理:
>>> result.ready()
False
倘若任務拋出了一個異常, get() 會重新拋出異常, 但你可以指定 propagate 參數來覆蓋這一行為:
>>> result.get(propagate=False)
如果任務拋出了一個異常,你也可以獲取原始的回溯信息:
>>> result.traceback
celery 任務隊列 + redis