Celery 什麼是Celery? Celery是一種簡單/高效/靈活的即插即用的分散式任務隊列. Celery應用場景? 需要非同步處理的任務,發郵件/發簡訊/上傳等耗時的操作.最終到達提升用戶體驗的目的. Celery的模式 Celery主要是由Broker(中間人)和Worker(任務處理者)組 ...
Celery
什麼是Celery?
Celery是一種簡單/高效/靈活的即插即用的分散式任務隊列.
Celery應用場景?
需要非同步處理的任務,發郵件/發簡訊/上傳等耗時的操作.最終到達提升用戶體驗的目的.
Celery的模式
Celery主要是由Broker(中間人)和Worker(任務處理者)組成,執行流程為客戶端發起任務--->Bocker接收任務,分配給--->Worker處理任務.
Celery安裝
pip install -U Celery
基本配置:
broker指定消息隊列保存的位置
backend指定執行結果保存的位置
from celery import Celery
# 增加配置,redis為例
# 第一種
app = Celery('demo',
backend='redis://:127.0.0.1:6379/2',
broker='redis://:127.0.0.1:6379/1')
# 第二種
app = Celery('demo')
app.conf.update(
broker_url='redis://:127.0.0.1:6379/1',
result_backend='redis://:127.0.0.1:6379/2',
)
# 第三種,導入.py模塊,config中指定broker_url/result_backend
app = Celery('demo')
app.config_from_object('config')
基本使用
1.配置,創建應用,如上.
2.將非同步任務加入到bocker中.
使用裝飾器@app.task
來將任務加入到bocker中.
@app.task
def demo_task():
print('demo')
return '任務結果'
3.開啟worker,處理任務
task為創建應用的.py文件,也就是在app所在模塊的統計目錄下執行
celery -A tasks worker --loglevel=info
4.調用任務
from tasks import demo_task
demo_task.delay() # 如果任務有參數,直接在delay()中傳入
5.保存結果(非必須)
# ret是一個AsyncResult對象,保存有返回值等信息.
ret = demo_task.delay()
# 返回值
ret.result
其他功能
group: 一組任務並行執行,返回一組返回值,並可以按順序檢索返回值。
chain: 任務一個一個執行,一個執行完將執行return結果傳遞給下一個任務函數.