下面以发送认证电子邮件为例:
我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果由于各种原因,这封邮件发送所需时间较长,那么客户端将会等待很久,造成不好的用户体验。
关于Celery:
Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。
任务发出者 -----> 任务队列----->任务处理者
1、建立消息队列
首先,我们必须拥有一个broker消息队列用于发送和接受消息。Celery官网给出了多个broker的备选方案:RabbitMQ、Redis、Database(不推荐)以及其他的消息中间件。使用RabbitMQ作为我们的消息中间人。在Linux上安装的方式如下:
sudo apt-get install rabbitmq-server
命令执行成功后,rabbitmq-server就已经安装好并运行在后台了。
另外也可以通过命令rabbitmq-server -detached来在后台启动rabbitmq server以及命令rabbitmqctl stop来停止server。
import djcelery djcelery.setup_loader() BROKER_URL = 'redis://172.0.0.1:6379/8' CELERY_RESULT_BACKEND = 'redis://172.0.0.1:6379/8' ... INSTALLED_APPS = ( ... "djcelery" ... )
创建task文件,建立task.py
from django.core.mail import send_mail from django.conf import settings from celery import Celery import time #创建一个Celery类的实例对象 app = Celery("celery_tasks.tasks", broker="redis://172.0.0.1:6379/8") #定义一个任务函数 @app.task def send_register_active_email(to_email, username, token): '''发送激活邮件''' subject = "天天生鲜欢迎信息" message = "" sender = settings.EMIL_FROM receiver = [to_email] html_message = "<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面的连接激活您的账号http://www.tiantian%s,%s<br/>"%username, token, token send_mail(subject, message, sender, receiver, html_message=html_message) view.py #发送邮件 def send(): send_register_active_email.delay(emai, username, token) return redirect(reverse("index.index"))
celery 的使用命令方法:
$ celery help
文章来源: https://blog.csdn.net/weixin_44313745/article/details/90409247