celery的使用

celery介紹

celery 是一個簡單、靈活且可靠的,處理大量消息的分佈式系統。包括處理異步任務隊列、分佈式消息傳遞、實時或調度任務等比較耗時的任務。html

環境:

win10:做開發機   要有python環境(celery,redis)python

虛擬機ubuntu:做服務器 要有python虛擬環境(celery,redis)redis

舉個例子:

好比註冊時需郵箱註冊,那麼django會把發送郵件的信息先發送到smtp服務器,而後smtp服務器在給你發送到目的郵箱,但smtp服務器發送到你目標的郵箱可能須要一些時間,或一些其餘的緣由,而形成用戶體驗不好,因此這個問題celery能夠幫咱們解決。數據庫

celery+redis圖解:django

任務隊列是一箇中間件,能夠是RabbitMQ、Redis。這裏咱們用的是Redis。ubuntu

客戶端發出任務放到任務隊列(redis)中,處理者監聽到有任務以後,執行任務。服務器

*注意:任務隊列和任務處理者能夠有多個。app

使用celery(藉助每天生鮮的例子)

1.在項目中新建個python包存聽任務(tasks.py爲任務文件)異步

2.編寫任務文件tasks.py分佈式

# _*_ coding:utf-8 _*_
__author__ = 'cc'
__date__ = '2019/6/11 16:59'

from celery import Celery
from django.conf import settings
from django.core.mail import send_mail
#from django_redis import get_redis_connection


#任務處理者(服務器)所用到的初始化
import os
# import django
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ttsx2.settings")
# django.setup()

from goods.models import GoodsType,IndexGoodsBanner,IndexPromotionBanner,IndexTypeGoodsBanner
from django.template import loader

#建立一個Celery類的實例對象
app = Celery('celery_tasks.tasks',broker='redis://192.168.75.128:6379/1') #第一個參數爲對象名,通常寫路徑名,broker:鏈接中間件redis,後面數字表示第幾個數據庫,最多到第15個

#定義任務函數
@app.task   #必需要有   對函數進行裝飾
def send_register_active_email(to_email,username,token):
    """
    發送激活郵件
    :param to_email:
    :param username:
    :param token:
    :return:
    """
    subject = 'ttsx歡迎信息'
    message = '{0},歡迎您,請點擊下面連接激活您的帳戶:http://127.0.0.1:8000/user/active/{1}'.format(username, token)
    sender = settings.EMAIL_FROM
    receiver = [to_email]
    send_mail(subject, message, sender, receiver)

3.配置views.py

#註冊類視圖
class RegisterView(View):
    def get(self,request):
        return render(request,'register.html',{})
    def post(self,request):
        forms = RegisterForm(request.POST)
        if forms.is_valid():
            username = forms.cleaned_data['username']
            password = forms.cleaned_data['password2']
            email = forms.cleaned_data['email']

            user = User.objects.create_user(username=username,password=password,email=email)
            user.is_active=0
            user.save()

            #發送激活郵件,包含激活連接:http://127.0.0.1:8000/user/active/1
            #激活連接中須要包含用戶的身份信息   而且要把身份信息進行加密
            #加密用戶的身份信息,生成激活token
            serializer = Serializer(settings.SECRET_KEY,3600)   #實例化對象
            info = {'confirm':user.id}
            token = serializer.dumps(info)          #加密  bytes類型
            token = token.decode()    #解碼   字符串
            #發郵件
            # subject = 'ttsx歡迎信息'
            # message = '{0},歡迎您,請點擊下面連接激活您的帳戶:http://127.0.0.1:8000/user/active/{1}'.format(username, token)
            # sender = settings.EMAIL_FROM
            # receiver = [email]
            # send_mail(subject, message, sender, receiver)
            send_register_active_email.delay(email,username,token)   #調用任務文件send_register_active_email函數
return render(request, 'register.html', {'msg':forms})

4.把整個項目拷貝到(虛擬機)服務器上。

5.(虛擬機)服務器配置

   (1)啓動redis服務

   

   (2)  進入該項目  啓動虛擬環境

     

  (3)打開任務處理者用到的初始化

   進入任務文件刪掉註釋

   

   (4)啓動worker監放任務

   

   

結果:

使用郵箱註冊

前提:在settings.py中配置發送郵件配置

如:

運行項目

點擊註冊後發送任務到中間件redis中,worker監聽到任務,執行

收到郵件

點擊連接便可激活用戶

相關文章
相關標籤/搜索