zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    UnixTime的时间戳的转换
    dotnet cors 跨域问题
    sqlServer备份和还原语句
    mvc的生命周期
    Java序列化
    js 分页
    jquery js 分页
    Myeclipse 6.0代码
    前序遍历_中序遍历_后序遍历
    数组去重的一些方法以及数组排序
  • 原文地址:https://www.cnblogs.com/yuanzhengchi/p/8685761.html
Copyright © 2011-2022 走看看