Django-Celery異步發送激活郵件,以及注意點


  • 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
 


免責聲明!

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



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