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

一、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. springmvc sessionfilter 登录过滤器

    1.在web.xml中配置 <!-- sessionfilter --> <filter> <filter-name>sessionFilter</filte ...

  2. three.js 3d三维网页代码加密的实现方法

    http://www.jiamisoft.com/blog/17827-three-js-3dsanweiwangyejiami.html https://www.html5tricks.com/ta ...

  3. Idea 全局替换指定字符

    最近使用idea开发,刚接触不久,然后碰到需要全局替换的时候,懵逼了.之前使用eclipse 直接Ctrl+F 就可以操作了. 现在使用idea 摁Ctrl+F竟然只能搜,不能替换....尴尬的一匹. ...

  4. phpstorm 安装yaf代码提示文件

    安装yaf代码提示:https://www.jianshu.com/p/dc719ae74f97 4.下载代码提示文件 下载地址: https://github.com/xudianyang/yaf. ...

  5. luogu[愚人节题目3]现代妖怪殖民地 NTT

    U34272 [愚人节题目3]现代妖怪殖民地 fft 题目链接 https://www.luogu.org/problemnew/show/U34272 思路 虽然是个py题. ntt(或者fft)模 ...

  6. python学习----IO模型

    一.IO模型介绍 本文讨论的背景是Linux环境下的network IO. 本文最重要的参考文献是Richard Stevens的"UNIX® Network Programming Vol ...

  7. CTF显隐术:九连环

    题目:http://www.shiyanbar.com/ctf/2007 这个也挺基础的,需要注意的是:1.不要因为binwalk扫不出来就以为没有隐藏嵌入数据.2.千万不要暴力破解压缩包,如果是这样 ...

  8. Kotlin 循环控制

    For 循环 for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下: for (item in collection) print(item) 循环体可以是一个代码块: for ...

  9. springboot启动配置原理之三(事件监听机制)

    ApplicationContextInitializer public class HelloApplicationContextInitializer implements Application ...

  10. 微信小程序 密码键盘 - 密码页面组件 (原生小程序代码)

    1.WXML页面 <view> <!--<section class="mask" catchtap="canclePwd" wx:if ...