特点:简单,有文档帮助;高效,单个celery进程每分可处理数百万个任务;灵活,celery每个部分都可进行扩展
pip install celery 安装了Celery的机子就叫celery服务器
组成:任务队列是跨线程,跨机器工作的一种机制,有专门进程监听任务队列,从中获得新的任务并处理
客户端------》broker中间人------》worker服务器 celery系统可包含多个broker worker
1创建celery异步任务文件包
2创建应用对象/客户端
from celery import Celery
Celery() 参数1:异步任务在项目中的路径,参数2:指定的broker中间人
app = Celery('celery_tasks.tasks', broker='redis://192.***.***.***:6379/2')
app.task 装饰异步发送的任务
@app.task
def send_active_email(to_email, user_name, token):
"""发送激活邮件"""
subject = "死去活来用户激活" # 标题
body = "" # 文本邮件体
sender = settings.EMAIL_FROM # 发件人
receiver = [to_email] # 接收人
html_body = '<h1>尊敬的用户 %s, 感谢您注册!</h1>' \
'<br/><p>请点击此链接激活您的帐号<a href="http://127.0.0.1:8000/users/active/%s">' \
'http://127.0.0.1:8000/users/active/%s</a></p>' %(user_name, token, token)
send_mail(subject, body, sender, receiver, html_message=html_body)
调用python中的send_mail来发送邮件
视图里需要使用delay()来触发调用异步任务,我理解为celery的标识不然不认识
send_active_email.delay(email, user_name, token)
3创建worker
把项目拷贝的celery服务器所在的机子上
将以下代码拷贝到tasks。py文件顶部
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "项目名.settings"
# 放到Celery服务器上时添加的代码
import django
django.setup()
在服务器终端开启celery服务:
celery -A celery_tasks.tasks worker -l info