Celery参考文档:http://docs.celeryproject.org/en/latest/index.html#
Celery介绍
Celery是一个功能完备的即插即用的任务队列
Celery适用异步处理问题,比如发送邮件,文件上传,图像处理等等比较耗时的操作,我们可将其异步执行,这用可以减少用户的等待时间,提高用户体验.
Celery特点:
1.简单,易于使用和维护
2.高效,单个Celery进程每分钟可以处理百万个任务
3.灵活,Celery中几乎每个部分都可以自定义扩张
4.Celery非常易于集成到一些web开发框架中
安装Celery
pip install celery
Celery组成结构
任务队伍是一种跨线程,跨机器工作的一种机制
任务队列中包含任务的工作单元,有专门的工作进程持续不断的监视任务队列,并从中获取新的任务处理
Celery通过消息设置进行通信,client(客户端)-->broker(任务队列)-->worker(任务处理者)
一个Celery系统可以包含很多的worker和broker,可增强横向拓展性和高可用性能
Celery组成结构是生产者消费者模型的一种体现
Celery的使用
1.创建Celery异步任务文件
创建如以下文件夹
2.创建应用对象/客户端/client
创建main.py文件,用于作为celery的启动文件
from celery import Celery
#创建Celery对象
#参数main 设置脚本名
app = Celery('celery_tasks')
#加载配置文件
app.config_from_object('celery_tasks.config')
3.中间人broker
1.RabbitMQ
细节链接 http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#broker-rabbitmq
2.redis
这里用redis实现
创建config.py文件
broker_url = "redis://127.0.0.1/14"
result_backend = "redis://127.0.0.1/15"
4.创建任务,并让celery检测
创建任务,在sms下创建tasks.py
from libs.yuntongxun.sms import CCP
from celery_tasks.main import app
#可以设置name参数
@app.task(name='send_sms_code')
def send_sms_code(mobile,sms_code):
ccp = CCP()
ccp.send_template_sms(mobile, [sms_code, 5], 1)
然后在main.py中添加代码
#自动加载任务
app.autodiscover_tasks(['celery_tasks.sms'])
5.创建worker
添加配置,将worker创建到Django环境中,完整代码为,main.py
from celery import Celery
#进行Celery允许配置
# 为celery使用django配置文件进行设置
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = 'mall.settings'
#创建Celery对象
#参数main 设置脚本名
app = Celery('celery_tasks')
#加载配置文件
app.config_from_object('celery_tasks.config')
#自动加载任务
app.autodiscover_tasks(['celery_tasks.sms'])
6.指令执行
需要早虚拟环境中运行,在终端运行
celery -A celery对象的路径 worker -l info
例:celery -A celery_tasks.mian worker -l info