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

一、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. C++ WINDOWS 防多开

    我们有些程序是可以同时运行多个进程,典型的像Visual Studio.但有些就能一次运行一个进程.比如Outlook.那你可能会问啥时可以让它同时打开多个应用程序,啥时只能一个啊.这个主要看进程间是 ...

  2. 论文笔记【二】Making Sense of Word Embeddings

    摘要 1.作者提出了一种新的简单有效的方法,用于学习词义嵌入word sense embedding 2.传统的两种方法:(1)直接从语料库中学习词义:(2)依赖词汇资源的语义库 研究方法的创新点:通 ...

  3. Linux 查看内存状态

    # 查看系统内存 命令:free 注:默认k单位显示 注:-m 以MB 注:-g以GB 单位显示 total used free shared buffers cached Mem: -/+ buff ...

  4. (转载)Unity学习笔记:关于Dropdown的学习

    今天组长让我写一个界面,其中用到了下拉条,我的印象还停留在以前的NGUI有现成的组件,但是uGUI没有的那阶段,组长跟我说uGUI现在也有了,研究了一下,发现real方便哦,今天就来简单说一下用法吧. ...

  5. Hadoop之简单文件读写

    文件简单写操作: import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream ...

  6. Windows下的Jupyter Notebook 安装与自定义启动(图文详解)

    不多说,直接上干货! 前期博客 Windows下的Python 3.6.1的下载与安装(适合32bits和64bits)(图文详解) 这是我自定义的Python 的安装目录 (D:\SoftWare\ ...

  7. HTTP请求处理流程 MVC核心(MVC就是扩展了一个HttpModule)

    访问Localhost:8080/Home/index.aspx 在调用MVC扩展的UrlRoutingModule的时候  会先检查物理路径文件是否存在  存在的话就不执行MVC中的路由匹配规则  ...

  8. 第 8 章 容器网络 - 065 - 容器在 Weave 中如何通信和隔离?

    首先在host2 执行如下命令: weave launch 10.12.31.22 这里必须指定 host1 的 IP 10.12.31.22,这样 host1 和 host2 才能加入到同一个 we ...

  9. RabbitMQ(5)FanoutExchange

    Fanout 就是我们熟悉的广播模式或者订阅模式,给Fanout交换机发送消息,绑定了这个交换机的所有队列都收到这个消息. 生产者工程: package com.example.demo.rabbit ...

  10. Go语言开发Prometheus Exporter示例

    一.Prometheus中的基本概念 Prometheus将所有数据存储为时间序列,这里先来了解一下prometheus中的一些基本概念 指标名和标签每个时间序列都由指标名和一组键值对(也称为标签)唯 ...