- 1.Celery介紹
- 點擊查看Celery參考文檔
- Celery是一個功能完備即插即用的任務隊列
- Celery適用異步處理問題,比如發送郵件、文件上傳,圖像處理等等比較耗時的操作,我們可將其異步執行,這樣用戶不需要等待很久,提高用戶體驗
- 2.Celery特點:
- 簡單,易於使用和維護,有豐富的文檔
- 高效,單個Celery進程每分鍾可以處理數百萬個任務
- 靈活,Celery中幾乎每個部分都可以自定義擴展
- Celery非常易於集成到一些web開發框架中
-
3.安裝Celery
# 進入虛擬環境 pip install celery -
4.Celery組成結構
- 任務隊列是一種跨線程、跨機器工作的一種機制
- 任務隊列中包含任務的工作單元。有專門的工作進程持續不斷的監視任務隊列,並從中獲得新的任務並處理
- Celery通過消息進行通信,通常使用一個叫broker(中間人)來協client(任務的發出者)和worker(任務的處理者)
- client發出消息到隊列中,broker將隊列中的信息派發給worker來處理
- 一個Celery系統可以包含很多的worker和broker,可增強橫向擴展性和高可用性能。
-
Celery組成結構是生產者消費者模型的一種體現

-
Celery使用
1.創建Celery異步任務文件

-
2.創建應用對象/客戶端/client
- 應用對象內部封裝要異步執行的任務
- Celery():
- 參數1是異步任務路徑
- 參數2是指定的broker
- redis://密碼@redis的ip:端口/數據庫
- redis://192.168.243.191:6379/4
- 返回客戶端應用對象app
- send_active_email():內部封裝激活郵件內容,並用裝飾器@app.task注冊
-
調用python的send_mail()將激活郵件發送出去
from celery import Celery from django.core.mail import send_mail from django.conf import settings # 創建celery應用對象 app = Celery('celery_tasks.tasks', broker='redis://192.168.243.191:6379/4') -
# 中間人用redis,很多支持中間人broker的 
-
@app.task def send_active_email(to_email, user_name, token): #在視圖view中調用tasks的send_active_email.delay()方法時,傳的參數不能時obj"""發送激活郵件"""-
.......
-
-
4.創建worker
- 示例:此處演示把worker創建到ubuntu虛擬機中,ubuntu作為Celery服務器
-
Celery服務器創建worker步驟
-
1.把項目代碼拷貝一份到ubuntu虛擬機中
- 並在celery_tasks/tasks.py文件頂部添加以下代碼
-
作用:讓Celery的worker能夠加載Django配置環境
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "dailyfresh.settings"
# 放到Celery服務器上時添加的代碼 import django django.setup()
2.終端創建worker, 需要在虛擬環境下運行
celery -A celery_tasks.tasks worker -l info
