Django(异步)--Celery

匿名 (未验证) 提交于 2019-12-02 23:34:01

下面以发送认证电子邮件为例:

我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果由于各种原因,这封邮件发送所需时间较长,那么客户端将会等待很久,造成不好的用户体验。


关于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。

在settings.py

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!