安装celery
pip install celery
发送者端
from celery import Celery
from django.core.mail import send_mail
from 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.task
def send_activate_mail(to_email, username, token):
"""发送激活邮件"""
# 发邮件
subject = '天天生鲜用户激活'
message = ''
html_message = """
<h1>{},欢迎您成为天天生鲜注册会员</h1>
请点击下面链接激活您的账户<br/>
<a href="http://127.0.0.1:8000/user/activate/{}">天天生鲜用户激活链接</a>
""".format(username, token)
sender = settings.EMAIL_FROM
receiver = [to_email]
send_mail(subject, message, sender, receiver, html_message=html_message)
中间人broker
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)