django mysql分布式_分布式队列celery 异步----Django框架中的使用

仅仅是个人学习的过程,发现有问题欢迎留言

一、celery 介绍

celery是一种功能完备的即插即用的任务对列

celery适用异步处理问题,比如上传邮件、上传文件、图像处理等比较耗时的事情

异步执行,这样用户不需要等待很长的时间,提高用户的体验

celery是由python语言编写的,但是可以使用于许多语言,比如js、PHP等

二、celery的特点:

简单,易于使用和维护,有丰富的文档

高效,单个的celery进程每分钟可以处理数百个任务

灵活,celery中几乎每个部分都可以有自己的拓展

celery易于集成在一些web开发框架中

三、在Django框架中安装celery

1、进入虚拟环境

2、在终端中输入 pip install celery

四、celery的组成结构:

1、任务对列是一种跨线程、跨机器工作的机制;

2、任务对列中包含工作单元,有专门的工作进程持续不断的监听任务对列,并从中获取新的任务并处理;

3、celery通过消息进行通信,通常有一个client(任务发出者)通过broker(中间人)建立和worker(任务执行者)的通信

client发出消息到对列中,broker将对列中的信息派发给worker来处理

一个celery系统中可以包含多个worker和broker,可以增强横向的扩展性和高可用性

celery组成结构是生产者消费者模型的一种体现

五、celery在Django项目中的具体应用案例:

1、在项目的目录下创建一个celery_tasks文件夹

2、创建应用对象/客户端/client

2.1在celery_tasks的目录下创建一个main.py文件,作为celery的启动文件

"""celery:

必须先导入配置文件

创建celery实例

让celery加载broker

celery实例对象自动检测

1、任务

2、broker

3、worker"""

#导入工程的配置文件,可以通过复制工程manage.py文件中的信息

importosfrom celery importCelery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mall.settings")#创建celery实例#参数 main 其实就是给celery设置一个名字,这个名字唯一就可以#推荐使用 文件路径

app = Celery(main='celery_tasks')#让celery加载broker

app.config_from_object('celery_tasks.config')#让celery实力对象自动检测任务#参数:

#列表

#列表中需要填写 任务的包路径

app.autodiscover_tasks(['celery_tasks.sms'])

2.2在celery_tasks的目录下创建一个config.py文件,用于存放broker

本次项目中采用的Redis数据库作为中间人

celery需要一种解决消息发送和接受的方式,我们把这种用来储存消息的中间装置称为message

可以使用RabbitMQ:是一个功能完备,稳定的,并且易于安装的broker,它是生产环境最优的选择

可以采用Redis:也是一个功能完备broker,但是其可能因为意外中断或者电源故障导致数据丢失

"""配置信息,单独放在一个文件中

broker 选择放在redis的14号库"""broker_url= 'redis://127.0.0.1/14'

#执行任务的结果保存再15号库

result_url = 'redis://127.0.0.1/15'

2.3在celery_tasks的目录下创建一个sms文件包(例子是用来发送短信的,因此起名sms),在sms文件包中创建一个tasks.py文件,用于发布任务

from celery_tasks.main importappfrom libs.yuntongxun.sms importCCP#创建任务

"""任务:

任务包所对应的py文件 必须为tasks.py

所谓的任务就是函数

这个函数必须被celery的实例对象的task装饰器装饰

这个任务必须被实力对象自动检测"""

#bug task多了一个s,导致没任务

@app.taskdefsend_sms_code(mobile,sms_code):

CCP().send_template_sms(mobile,[sms_code,5],1)

2.5需要找到对应的视图中,导入任务

#在视图中导入celery

from celery_tasks.sms.tasks importsend_sms_code#delay 的参数同 send_sms_code 的参数

send_sms_code.delay(mobile,sms_code)

2.6、在终端中添加执行命令

celery -A celery实例对象所在的文件 worker -l info

celery -A celery_tasks.main worker -l info

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值