芹菜 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