celery是一个基于python开发的分布式异步消息任务队列
它能将从客户端获取消息任务,然后交给中间人准备处理,再从中间人的消息队列中取出消息任务交由服务端程序处理
当django服务器需要处理耗时操作时,如果不利用异步消息队列将可能造成服务器空闲等待,浪费大量的时间
一、安装
Celery
标准Celery库可以直接pip安装
pip install celery
RabbitMQ
celery的运行需要一个发送和接收消息的解决方案,通常以独立服务形式出现的中间人,常用RabbitMQ
RabbitMQ安装方法详见
https://www.rabbitmq.com/download.html
Redis
Redis是一个实时数据库,也可以作为中间人,如果选择Redis,可以直接捆绑安装
pip install -U celery[redis]
二、在django中使用Celery
1、创建celery目录
直接在django项目文件夹中创建celery目录
在目录中创建一个__init__.py文件,将其变成一个可调用python包
2、在celery目录中创建一个配置文件 config.py
写入代码
#配置文件
broker_url='redis://127.0.0.1/3'
这里使用redis作为中间人,配置文件完成
3、创建启动文件 main.py
写入代码
#启动文件
from celery import Celery
#告知celery使用django的配置文件进行配置
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE']='django_project.settings.dev'
#创建应用,注册django项目名称
app =Celery('django_project')
#导入celery的配置文件
app.config_from_object('celery_tasks.config')
4、创建任务
在celery目录中创建一个任务文件夹
同样在里面创建一个__init__.py文件,将其变成一个可调用python包
创建一个任务文件 task.py
该任务为发送邮件,写入代码
#在当前的tasks里面书写邮件发送任务
from django.core.mail import send_mail
from django.conf import settings
from celery_tasks.main import app
@app.task(name='send_mail')
def send_email(email_url,url_string):
send_mail(subject='邮件激活',from_email=settings.EMAIL_FROM,recipient_list=[email_url],html_message=url_string,message='激活')
send_email是一个自定义任务函数,使用装饰器将任务注册到celery可处理任务中
5、将任务注册到celery主函数
在main.py文件中添加代码
#任务
app.autodiscover_tasks(['celery_tasks.email',])
6、运行celery
在django项目目录下执行命令
celery -A tasks worker --loglevel=info
如果是在windows环境下,则执行代码
celery -A celery_tasks.main worker --pool=solo -l info