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

一、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. docker基本部署

    一.基本概念docker 1.镜像(Image) Docker 镜像就是一个只读的模板. 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用 ...

  2. CAN control

    2019/4/23--10:14 E_BSW_NWK_TRIGGER_SOURCE_KICK_MOTION_CMD SCI_NwkButton_GetPeriodicSignals case 6:   ...

  3. MVC设计思路

    MVC 学会重复.学会总结.学会预习和练习 前端页面  <---->   服务器(控制层.业务层.DAO层) <--->  DB 说明:无论是框架还是servletJSP,用的 ...

  4. Docker Kubernetes Service 网络服务代理模式详解

    Docker Kubernetes  Service 网络服务代理模式详解 Service service是实现kubernetes网络通信的一个服务 主要功能:负载均衡.网络规则分布到具体pod 注 ...

  5. Linux——命令

    1.pod2text    # 功能输出处理对象(脚本)中的的=head1 ...=head1 ......=cut框架中的信息 2.date           # 输出时间  eg: Sat Ju ...

  6. visio连接线设置

    以下画图是在新建空白模式的 默认的连线,如下图, 通过设置设计模式,可以把直角线编程直的线段, 设置如下图, 效果,如下图, 如果想在上面的图的线加箭头,可以一条一条加,但是,但是效率太低,我们可以通 ...

  7. nrf52832-定时器例程

    SDK版本:15.20 代码 #include <stdbool.h> #include <stdint.h> #include "nrf_delay.h" ...

  8. [Jenkins] 配置任务中的坑s

    Jenkins 坑1:sh: adb: command not found 背景:在任务中使用了adb命令 adb 使用时要在服务器上配Android-home的环境变量的 配置完成之后发现在服务器上 ...

  9. 《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码

    <HTTP 权威指南>笔记:第十六章 国际化 客户端通过在请求报文中的 Accept-Language 首部和 Accept-Charset 首部来告知服务器:“我理解这些语言.”服务器通 ...

  10. SQL Server数据归档的解决方案

    SQL Server数据归档的解决方案   最近新接到的一项工作是把SQL Server中保存了四五年的陈年数据(合同,付款,报销等等单据)进行归档,原因是每天的数据增量很大,而历史数据又不经常使用, ...