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
 
posted @ 2018-04-01 14:25  c-c  阅读(1343)  评论(2编辑  收藏  举报