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

一、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文件中的信息
import os
from celery import Celery
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 import app
from libs.yuntongxun.sms import CCP
#创建任务
"""
任务:
任务包所对应的py文件 必须为tasks.py
所谓的任务就是函数
这个函数必须被celery的实例对象的task装饰器装饰
这个任务必须被实力对象自动检测
"""
#bug task多了一个s,导致没任务
@app.task
def send_sms_code(mobile,sms_code):
CCP().send_template_sms(mobile,[sms_code,5],1)
2.5需要找到对应的视图中,导入任务
#在视图中导入celery
from celery_tasks.sms.tasks import send_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

分布式队列celery 异步----Django框架中的使用的更多相关文章

  1. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

    一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...

  2. 异步分布式队列Celery

    异步分布式队列Celery 转载地址 Celery 是什么? 官网 Celery 是一个由 Python 编写的简单.灵活.可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具 ...

  3. celery异步任务框架

    目录 Celery 一.官方 二.Celery异步任务框架 Celery架构图 消息中间件 任务执行单元 任务结果存储 三.使用场景 四.Celery的安装配置 五.两种celery任务结构:提倡用包 ...

  4. Django框架中的Context使用

    Django框架中的Context使用 2017年11月09日 20:01:09 aweilark 阅读数:1113   转载自:http://www.aichengxu.com/python/606 ...

  5. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  6. Python的Django框架中的Cookie相关处理

    Python的Django框架中的Cookie相关处理 浏览器的开发人员在非常早的时候就已经意识到. HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生. coo ...

  7. Python的Django框架中的Context使用

    Python的Django框架中的Context使用 近期整理些Python方面的知识,一旦你创建一个 Template 对象,你能够用 context 来传递数据给它. 一个context是一系列变 ...

  8. Django框架中使用Echart进行统计的SQL语句

    最近想用Echart做数据统计的图形显示,数据来源是MySQL数据库,自然需要根据不同的搜索条件筛选出表中的数据,用比较多的就是时间的参数吧! 常用的mysql时间的条件进行检索的SQL语句: 数据表 ...

  9. Python中的Django框架中prefetch_related()函数对数据库查询的优化

    实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

随机推荐

  1. 面试神体验之:get和post的区别

    由于本文是用markdown在本地编辑的,粘贴到本地的时候出现了一些页面bug,所以只好贴进代码里面,一些链接失效,望见谅 Get和POST的区别 都9102年了,你们还在问get和post的区别?是 ...

  2. sql语句修改字段约束为不为空 并为其设置主键

    alter table Drc_Project_Review alter column ReviewID uniqueidentifier not nullalter table Drc_Projec ...

  3. 【C++】回看面向对象与C++

    本文将记录在C++与面向对象的重新学习过程中的要点: 未定义行为

  4. CBV与FBV

    FBV FBV(function base views)就是在 url 中一个路径对应一个函数 urls.py urlpatterns = [ url(r'^admin/', admin.site.u ...

  5. antd Select进阶功能 动态更新、函数防抖

    一.动态更新Options Antd Select自带的搜索功能很多时候需要结合后端的接口,输入一个关键字的时候会自动更新选择器的选项. 下面列一些注意点 基础实现 选择器选项必须和每次更新的数据挂钩 ...

  6. elbow 求拐点

    distancePointLine <- function(x, y, slope, intercept) {  ## x, y is the point to test.  ## slope, ...

  7. Spark面试相关

    Spark Core面试篇01 随着Spark技术在企业中应用越来越广泛,Spark成为大数据开发必须掌握的技能.前期分享了很多关于Spark的学习视频和文章,为了进一步巩固和掌握Spark,在原有s ...

  8. MySQL简单查询语句练习

    数据查询语法(DQL) DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ F ...

  9. 日常英语---八、REBOOT - What is the difference? -MapleStory

    日常英语---八.REBOOT - What is the difference? -MapleStory 一.总结 一句话总结: trade transfer drop_rate equipment ...

  10. image magick 批量转换文件

    一个事例: You can set the output file name via -set + some percent escapes (in this case you need the di ...