在如上的情况下,假定Django网站发送邮件到smtp耗时是5s,那么用户在表单中输入信息之后提交,页面需要刷新5s才会跳转。显然这样极大影响了用户体验
# # 在任务一段加这几句代码初始化配置
# import os
# import django
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dailyfresh.settings')
# django.setup()
#使用celery
from celery import Celery
from django.core.mail import send_mail
from django.conf import settings
import time
import redis
#创建一个Celery的实例对象
broker='redis://127.0.0.1:6379/8'
app = Celery("celery_tasks.tasks",broker=broker)
#定义发送邮件任务函数
@app.task
def send_register_active_email(to_email,username,token):
"""发送激活邮件"""
# 发送邮件
subject = '天天生鲜欢迎信息'
message = ''
sender = settings.EMAIL_FROM
receiver = [to_email]
html_message = '<h1>{0}, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/{1}">http://127.0.0.1/user/active/{2}</a>'.format(
username, token, token)
send_mail(subject, message, sender, receiver, html_message=html_message)
#time.sleep(5)
#发送邮件
# subject = '天天生鲜欢迎您'
# message = ''
# from_email = settings.EMAIL_FROM
# recipient_list = [email]
# html_message = '<h1>{0},欢迎您成为天天生鲜注册会员</h1>请点击下面的链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/{1}">http://127.0.0.1:8000/user/active/{2}</a>'.format(username,token,token)
# send_mail(subject,message,from_email,recipient_list,html_message=html_message)
send_register_active_email.delay(email,username,token)
#返回应答,跳转到首页
return redirect(reverse('goods:index'))
celery -A celery_tasks.tasks worker -l info -P eventlet
如果任务处理者和redis都在另一台计算机上,就需要把项目和环境拷贝过去,然后也是同样的命令启动,不过在不同的计算机上就一定不能少了tasks.py中的8-11行的内容,因为tasks.py文件中的操作用到了Django项目中的一些配置
原文:https://www.cnblogs.com/venvive/p/12081865.html