celery 任務隊列 + redis

Celery 是一個「自帶電池」的的任務隊列。它易於使用,因此你能夠無視其所解決問題的複雜程度而輕鬆入門。它遵守最佳實踐設計,因此你的產品能夠擴展,或與其餘語言集成,而且它自帶了在生產環境中運行這樣一個系統所需的工具和支持。html

在此教程中,你會了解使用 Celery 的最基礎部分。包括:python

  • 選擇和安裝消息傳輸方式(中間人)。
  • 安裝 Celery 並建立第一個任務
  • 運行職程並調用任務。
  • 追蹤任務在不一樣狀態間的遷移,並檢視返回值。

選擇中間人

  Celery 須要一個發送和接收消息的解決方案,其一般以獨立服務形式出現, 稱爲 消息中間人 。redis

  在此介紹redis數據庫   安裝數據庫請看另外一篇文章:https://www.cnblogs.com/wbdream/p/10581310.html數據庫

安裝celery:app

  安裝celery接口: pip3 install celeryasync

應用:ide

首先你須要一個 Celery 實例,稱爲 Celery 應用或直接簡稱應用。既然這個實例用於你想在 Celery 中作一切事——好比建立任務、管理職程——的入口點,它必須能夠被其餘模塊導入。工具

在此教程中,你的一切都容納在單一模塊裏,對於更大的項目,你會想建立 獨立模塊 。ui

讓咱們建立 tasks.py :spa

  

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 
相關文章
相關標籤/搜索