Celery
任务发出者------》任务队列(中间人broker,用redis)-----》任务处理者(worker)
发出者发出任务,加入到任务队列(代码相当于发出者)
任务处理者监听任务队列
处理者也需要指定任务代码,不在同一台电脑需要拷贝
异步以及发送短信
1.setting中配置
# 配置邮件发送
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # 如果为163邮箱,设置为smtp.163.com
EMAIL_PORT = 25 # 或者 465/587是设置了 SSL 加密方式
# 发送邮件的邮箱
EMAIL_HOST_USER = '1508426536@qq.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '********' # 第三方登陆使用的授权密码
EMAIL_USE_TLS = True # 这里必须是 True,否则发送不成功
# 收件人看到的发件人, 必须是一直且有效的
EMAIL_FROM = '海上明月<11111@qq.com>'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
2.建立一个比如自己建立了一个task.py文件
from celery import Celery
from django.core.mail import send_mail
from tepro.settings import EMAIL_FROM
import redis
r = redis.Redis(host='localhost', port=6379,db=6)
# 加到处理者
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE","tepro.settings")
django.setup()
# 创建一个Celery类的实例对象 #第一个参数随便写,一般写路径 #第二个写redis路径
app = Celery('task',broker='redis://127.0.0.1:6379/9')
# 定义任务函数
@app.task
def send():
subject = '主题' # 主题
message = ''
from_email = EMAIL_FROM
recipient_list = ['1508426536@qq.com']
html_message = '<h3>{}, huiyuan:</h3>'
# 带标签的消息 html消息
send_mail(subject=subject,
message=message,
from_email=from_email,
recipient_list=recipient_list,
html_message=html_message
)
3.建立另一个,把任务加入到队列
from celery import Celery
from task import send
# 用delay发出任务放入队列,有参数也放在delay
send.delay()
# 启动处理者
celery -A 路径 worker