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 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM