安装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)
本文介绍了如何在Django项目中使用Celery和Redis作为消息中间人来实现异步任务,如发送激活邮件。首先通过pip安装Celery和配置Redis,然后创建Celery实例,定义任务函数send_activate_mail。任务处理者端启动worker执行任务,调用任务使用delay()方法。 Celery的这种异步处理方式提高了系统的响应效率。
1520

被折叠的 条评论
为什么被折叠?



