芹菜 Redis

安裝

Redis 支援需要其他依賴項。使用 celery[redis] 軟體包一次安裝 Celery 和依賴項:

$ pip install -U celery[redis]

組態

配置 Redis 資料庫的位置:

BROKER_URL = 'redis://localhost:6379/0'

URL 應採用以下格式:

redis://:password@hostname:port/db_number

應用

建立檔案 tasks.py:

from celery import Celery

BROKER_URL = 'redis://localhost:6379/0'
app = Celery('tasks', broker=BROKER_URL)

@app.task
def add(x, y):
    return x + y

Celery 的第一個引數是當前模組的名稱。這樣就可以自動生成名稱。第二個引數是 broker 關鍵字,它指定訊息代理的 URL。

執行芹菜工作伺服器

通過使用 worker 引數執行來執行 worker:

$ celery -A tasks worker --loglevel=info

呼叫任務

要呼叫該任務,請使用 delay() 方法。

>>> from tasks import add
>>> add.delay(4, 4)

呼叫任務會返回 AsyncResult 例項,該例項可以檢查任務的狀態,等待任務完成或獲取其返回值。 (如果任務失敗,則會獲得異常和回溯)。

保持結果

為了跟蹤任務的狀態,Celery 需要在某處儲存或傳送狀態。使用 Redis 作為後端的結果:

BROKER_URL = 'redis://localhost:6379/0'
BACKEND_URL = 'redis://localhost:6379/1'
app = Celery('tasks', broker=BROKER_URL, backend=BACKEND_URL)

要閱讀有關結果後端的更多資訊,請參閱結果後端

現在配置了結果後端,再次呼叫該任務。這次堅持從任務返回的 AsyncResult 例項:

>>> result = add.delay(4, 4)

ready() 方法返回任務是否已完成處理:

>>> result.ready()
False

可以等待結果完成,但這很少使用,因為它將非同步呼叫轉換為同步呼叫:

>>> result.get(timeout=1)
8

基於芹菜官方檔案