使用django + celery + redis 异步发送邮件
参考: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 异步发送邮件的更多相关文章
- Django Celery Redis 异步执行任务demo实例
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis实现运行定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- 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 大概的报错如下截图: 是在开 ...
- Django+Celery+Redis实现异步任务(发送邮件)
安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...
- Django+Celery 执行异步任务和定时任务
celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...
- 06: django+celery+redis
目录: 1.1 Celery介绍 1.2 celery 组件 1.3 安装相关包 与 管理命令 1.4 celery与Django执行异步任务 1.5 在django中使用计划任务功能 1.1 Cel ...
- 项目部署Django+celery+redis
celery介绍 1.celery应用举例 1.Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以 ...
随机推荐
- java泛型(一)、泛型的基本介绍和使用
现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用.泛型在java中,是一个十分重要的特性,所以要好好的研究下. 泛 型的定义:泛型是JDK 1.5的一 ...
- 【python】面试常考数据结构算法
这里整理的都是基础的不能再基础的算法,目的就是进行一个回忆,同时作为剑指offer的一个补充~嘿嘿~ 查找算法二分查找# 实现一个二分查找# 输入:一个顺序list# 输出: 待查找的元素的位置def ...
- System.out.println()详解 和 HttpServletRequest 和 XMLHttpRequest
System是一个类,位于java.lang这个包里面.out是这个System类的一个PrintStream类型静态属性.println()是这个静态属性out所属类PrintStream的方法. ...
- ASP.NET MVC Area 的使用
MVC提供Area机制,在同一个项目之内就能够切割出不同的ASP.NET MVC网站. 插入:首先在相同的位置,比如说同一个文件夹(如:Controllers)是不能创建俩个相同名称的文件(如:Hom ...
- zstack(一)运行及开发环境搭建及说明(转载)
本篇介绍zstack的部署环境,以及二次开发环境 运行环境 讲真,ZStack的安装做的还是不错的,提供多种安装模式,如离线安装.在线安装.一键安装.分布式安装等.安装的过程其实都很简单,当然这也是z ...
- Nginx 整合 FastDFS 实现文件服务器
原文地址:Nginx 整合 FastDFS 实现文件服务器 博客地址:http://www.extlight.com 一.前言 本篇衔接<FastDFS 环境搭建>内容进行讲解,上篇文章我 ...
- x86 openwrt虚拟路由代理上网
一.代理服务器设置 1.下载代理软件CCProxy 6.8 Build 2.设置如下 二.x86 路由设置 1.在/etc目录下编辑profile http_proxy= https_proxy= f ...
- 实验 1 Java 运行环境的安装、配置与运行
一.实验目的 1. 掌握下载 Java SDK 软件包. 2. 掌握设置 Java 程序运行环境的方法. 3. 掌握编写与运行 Java 程序的方法. 4. 了解 Ja ...
- 捕获长时间不提交的SQL语句
/* Formatted on 2014/5/19 17:16:16 (QP5 v5.240.12305.39476) */ SELECT s.sid, s.serial#, ss.sql_text ...
- 【JSP中引入文件】JSP中获取根路径+引用js文件
在jsp界面中经常需要引入js.css等文件,通常都需要先获取项目根路径,然后再引入文件. 例如: 项目路径如下,需要在index.jsp中引入FusionCharts相关的js.css等: inde ...