pip install celery
发送者端from celery import Celeryfrom django.core.mail import send_mailfrom dailyfresh import settings"""第一个参数为当前模块的名称,只有在 __main__ 模块中定义任务时才会生产名称。第二个参数为中间人(Broker)的链接 URL ,Celery默认使用的也是RabbitMQ。使用 Redis 可以写为redis://localhost。"""app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/8')# 定义任务函数@app.taskdef send_activate_mail(to_email, username, token): """发送激活邮件""" # 发邮件 subject = '天天生鲜用户激活' message = '' html_message = """ {},欢迎您成为天天生鲜注册会员 请点击下面链接激活您的账户
天天生鲜用户激活链接 """.format(username, token) sender = settings.EMAIL_FROM receiver = [to_email] send_mail(subject, message, sender, receiver, html_message=html_message)
Celery 需要一个中间件来进行接收和发送消息,通常以独立的服务形式出现,成为 消息中间人(Broker)
以下有几种选择:
RabbitMQ
RabbitMQ 的功能比较齐全、稳定、便于安装。在生产环境来说是首选的。
http://www.rabbitmq.com/download.html
Redis
Redis 功能比较全,但是如果突然停止运行或断电会造成数据丢失。
任务处理者端worker使用 worker 参数进行执行我们刚刚创建职程 (Worker):
# 处理者启动任务celery -A celery_tasks.tasks worker --loglevel=info
在处理者端也需要项目代码,并且添加以下两句
# 在任务处理者端添加os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dailyfresh.settings')django.setup()
调用任务需要调用我们创建的实例任务,可以通过 delay() 进行调用。
delay() 是 apply_async() 的快捷方法,可以更好的控制任务的执行(详情:调用任务:Calling Tasks):
from celery_tasks import tasks# celery调用任务发邮件tasks.send_activate_mail.delay(email, username, token)