参考:http://blog.csdn.net/Ricky110/article/details/77205291

环境:

centos7  +  python3.6.1 + django2.0.1  +  celery4.1.0  +  redis3.2.10

yum  install -y redis

pip3 install redis,celery,django

开始:

创建django工程my_report

创建app celery_test, 如下所示 :

  • INSTALLED_APPS中注册app_celery

  • setting中celery配置

  • # Celery settings
    CELERY_BROKER_URL = 'redis://localhost:6379'
    #: Only add pickle to this list if your broker is secured
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_ENABLE_UTC = True
    CELERY_TIMEZONE = 'Asia/Shanghai'

      

  • setting中mail配置
  • EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = "smtp.mail.haoyisheng.com"
    EMAIL_HOST_PASSWORD = '******'
    DEFAULT_FROM_EMAIL = EMAIL_HOST_USER = "lijianwei@mail.haoyisheng.com"
    EMAIL_PORT = 25
    EMAIL_USE_TLS = True

      

  • app所在目录添加tasks.py文件(必须是该文件名), 用于处理任务
  • from __future__ import absolute_import, unicode_literals
    from celery import shared_task
    from django.core.mail import send_mail
    import logging logger = logging.getLogger(__name__) @shared_task
    def celery_send_email(subject, message, from_email, recipient_list, **kwrags):
    try:
    # 使用celery并发处理邮件发送的任务
    logger.info("\n开始发送邮件")
    send_mail(subject, message, from_email, recipient_list, **kwrags)
    logger.info("邮件发送成功")
    return 'success!'
    except Exception as e:
    logger.error("邮件发送失败: {}".format(e))

      

  • 配置目录my_report中添加celery.py文件
  • from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery # 为celery程序设置DJANGO_SETTINGS_MODULE环境变量
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_report.settings') app = Celery('celery_test') # 从Django的设置文件中导入CELERY设置
    app.config_from_object('django.conf:settings', namespace='CELERY')
    # 从所有已注册的app中加载任务模块
    app.autodiscover_tasks() @app.task(bind=True)
    def debug_task(self):
    print('Request: {0!r}'.format(self.request))

      

  • 配置目录my_report的__init__.py文件中添加如下
  • from __future__ import absolute_import, unicode_literals
    
    # 这将保证celery app总能在django应用启动时启动
    from .celery import app as celery_app
    __all__ = ['celery_app']

      

编写url映射和视图

from django.contrib import admin
from django.urls import path
from month_report import views urlpatterns = [
path('admin/', admin.site.urls),
path('send_email/', views.add_task_to_celery, name='send_email'),
]

  

编写views:

from django.http import HttpResponse
from celery_test.tasks import celery_send_email
def add_task_to_celery(request):
celery_send_email.delay(u'邮件主题', 'test_mail_message', 'lijianwei@mail.haoyisheng.com',
['lijianwei@mail.haoyisheng.com'])
return HttpResponse('hello world')

  

  • 在manage.py同级目录执行如下命令, 启动celery的worker进程(主要用于消费或执行任务)

celery -A my_report  worker --loglevel=info

执行成功:

  • 从客户端请求
  • http://ip:port/send_email/
  • 然后会收到页面返回hello world, 并且终端显示时间处理结果为成功

然后验证邮箱有收到邮件,成功

温馨提示

  • 当前使用方法,如需要在tasks.py中新添加任务,新增后,则需要重启django, 并且需要从起celery worker进程, worker进程默认不能动态加载事件。

使用django + celery + redis 异步发送邮件的更多相关文章

  1. Django Celery Redis 异步执行任务demo实例

    一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...

  2. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  3. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  4. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  5. Django+Celery+redis kombu.exceptions.EncodeError:Object of type is not JSON serializable报错

    在本文中例子中遇到问题的各种开发版本如下: Python3.6.8 Django==2.2 celery==4.4.0 kombu==4.6.7 redis==3.3.0 大概的报错如下截图: 是在开 ...

  6. Django+Celery+Redis实现异步任务(发送邮件)

    安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...

  7. Django+Celery 执行异步任务和定时任务

    celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...

  8. 06: django+celery+redis

    目录: 1.1 Celery介绍 1.2 celery 组件 1.3 安装相关包 与 管理命令 1.4 celery与Django执行异步任务 1.5 在django中使用计划任务功能 1.1 Cel ...

  9. 项目部署Django+celery+redis

    celery介绍 1.celery应用举例 1.Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,   如果你的业务场景中需要用到异步任务,就可以 ...

随机推荐

  1. repo学习笔记

    1. 遍历所有的git仓库,并在每个仓库执行-c所指定的命令(被执行的命令不限于git命令,而是任何被系统支持的命令,比如:ls . pwd .cp 等 . $ repo forall -c &quo ...

  2. MySQL Transaction--事务隔离级别基础

    MYSQL 支持的事务隔离级别 REPEATABLE READ READ COMMITTED READ UNCOMMITTED SERIALIZABLE InnoDB 默认使用REPEATABLE R ...

  3. ballerina 学习 三十一 扩展开发(二)

    上篇说了使用ballerina 语言开发扩展模块,对于注解类型的我们是需要使用java 语言进行 开发的 官方提供了一个hello 的demo可以参考 https://github.com/balle ...

  4. stenciljs 学习十 服务器端渲染

      stenciljs提供了 ssr 支持,对于express 最简单的就是使用提供的中间件 express 集成 const express = require('express'); const ...

  5. 用cmd加密文件夹

    随着电脑的广泛应用,个人电脑的私人空间越来越大,很多人喜欢把个人的一些私隐的文件存放在电脑上,私隐文件当然是不想别人看到的,为了防止别人看不见自己的文件,可以有很多的方法,今天在网上看了一些文档,学会 ...

  6. jquery选择器之属性过滤选择器详解

    代码如下: <style type="text/css">  /*高亮显示*/  .highlight{       } </style> 复制代码代码如下 ...

  7. Linux性能测试工具安装全集

    stress 下载地址:http://people.seas.harvard.edu/~apw/stress/ 一.stress工具安装:1.获取stress源码安装包(stress-1.0.4.ta ...

  8. Spring 框架中 ModelAndView、Model、ModelMap 的区别

    Model Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类. public class ExtendedModelMap extends ModelMa ...

  9. Java数组初始

    首先要清楚数组变量与数组对象的概念.数组变量是一个引用变量,可以指向数组对象. int[] a = new int[]{7, 8, 9};        a是数组变量,指向有new创建的数组对象. 数 ...

  10. [boost] : lightweight_test库

    lightweight_test轻量级单元测试框架, 只支持最基本的单元测试, 不支持测试用例, 测试套件的概念, 简单小巧, 适合要求不高或者快速测试的工作. 基本用法 需要包含头文件#includ ...