一 RabbitMQ 和 celery

1 celery

Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery

celery 异步处理需要传递消息和存储结果,传递消息的叫 Broker(消息中间件),存储结果的叫 backend

(1) celery使用场景:

1 web应用。当用户触发的一个操作需要较长时间才能执行完成时,可以把它作为任务交给celery去异步执行,执行完成后再返回给用户。

2 定时任务。生产环境经常会有一些定时任务。

3 其他可以异步执行的任务。比如发送消息/ 邮件、推送消息、清理/设置缓存等

(2) celery的broker:

Celery 在执行任务时需要通过一个**消息中间件**来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis;

celery 消息的解决方案默认使用 amqp 协议(即 RabbitMQ),可以在配置中指定其他的消息解决方案

(3) Celery 定时任务:

Celery 定时任务-- celery beat(django也可以使用)

启动celery beat 和worker,实现隔一段时间,beat会发起一个任务消息让worker执行任务

2 RabbitMQ

RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。

应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。

排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

RabbitMQ作为一个消息队列管理工具被引入到和Celery集成,负责处理服务器之间的通信任务

RabbitMQ安装

安装配置epel源
$ rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm 安装erlang
$ yum -y install erlang 安装RabbitMQ
$ yum -y install rabbitmq-server 注意:service rabbitmq-server start/stop

安装API

pip install pika
or
easy_install pika
or
源码 注意: celery 不是使用的pika,而是自己实现的,维护的“amqp”包
https://pypi.python.org/pypi/pika

基于内存队列的,queue 消息队列(生产者消费者模型)

	import Queue
import threading message = Queue.Queue(10) def producer(i):
while True:
message.put(i) def consumer(i):
while True:
msg = message.get() for i in range(12):
t = threading.Thread(target=producer, args=(i,))
t.start() for i in range(10):
t = threading.Thread(target=consumer, args=(i,))
t.start()

而 RabbitMQ, 生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMQ Server实现的消息队列。

RabbitMQ的几个概念

1 Queue(队列)是RabbitMQ的内部对象,用于存储消息。

2 Channel是与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

3 exchange:生产者不是将消息直接放到queue(队列)中,而是先到exchange中,exchange主要用于控制消息到队列的路由,根据具体的exchange type将消息传给需要的队列或者直接废弃。

	ExchangeType有fanout、direct、topic、headers这四种,不同的类型有着不同的路由策略

二 django-celery 模块的使用

1 提高网站请求速度的方法

提高网站的请求速度,提高 用户 体验 

 1 缓存

 2 不能缓存的 任务可以提交 celery 异步执行

2 原理:

开一个新的进程(也可以加定时任务)
处理耗时的操作 任务---函数--task
队列 queue 存储多个耗时操作
worker 负责执行renwu
broker 负责调度

3 使用 :

安装

pip install celery
pip install celery-with-redis
pip install django-celery 配置: install_apps = {
'''
'djcelery'
} import djcelery djcelery.setup_loader()![](https://images2018.cnblogs.com/blog/1220788/201803/1220788-20180328215633011-1420381525.png) BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_IMPORTS = ('应用名称.task') 在应用目录下创建 task.py文件 import time
from celery import task @task
def sayhello(): print('hello...')
time.sleep(0.5)
print('world...') 迁移 生成celery的数据表 python manage.py migrate 启动 redis 调用 worker python manage.py celery worker --loglevel=info 调用函数 function.delay()

Django --- celery异步任务与RabbitMQ模块的更多相关文章

  1. django celery异步框架

    描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用.   安装django和celery pip install django pip install celery pip inst ...

  2. django celery 异步执行任务遇到的坑

    部署后,任务没有持久化,所有用supervisor 进行进程管理 安装 pip install supervisor 创建 配置文件 [program:testplatform-flower] com ...

  3. django+celery+ RabbitMQ实现异步任务实例

    背景   django要是针对上传文件等需要异步操作的场景时,celery是一个非常不错的选择.笔者的项目就是使用了这个组合,这里就做一个备忘吧. 安装RabbitMQ   这个安装及使用我已经在前一 ...

  4. Django使用Celery异步任务队列

    1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收 ...

  5. django+celery +rabbitmq

    celery是一个python的分布式任务队列框架,支持 分布的 机器/进程/线程的任务调度.采用典型的生产者-消费者模型 包含三部分:1. 队列 broker :可使用redis ,rabbitmq ...

  6. Django+Celery+xadmin实现异步任务和定时任务

    Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...

  7. Django+Celery 执行异步任务和定时任务

    celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...

  8. Django商城项目笔记No.6用户部分-注册接口-短信验证码实现celery异步

    Django商城项目笔记No.4用户部分-注册接口-短信验证码实现celery异步 接上一篇,如何解决前后端请求跨域问题? 首先想一下,为什么图片验证码请求的也是后端的api.meiduo.site: ...

  9. Django之使用celery异步完成发送验证码

    使用celery的目的:将项目中耗时的操作放入一个新的进程实现 1.安装celery pip install celery 2.在项目的文件夹下创建包celery_tasks用于保存celery异步任 ...

随机推荐

  1. OPNET 安装运行问题总结

    OPNET作为专业级网络仿真软件,其强大的功能使其在多个领域有广泛的应用.“越强大的软件,安装越闹心”,OPNET就是这样一款安装和运行的都很闹心的软件,这里简单转载和记录我安装OPNET和使用中的问 ...

  2. JAVA发送HttpClient

    http://bijian1013.iteye.com/blog/2310211 在发送HTTP请求的时候会使用到POST和GET两种方式,如果是传送普通的表单数据,我们直接将参数到一个Key-val ...

  3. [Cannot deserialize JSON array into type] NewtonSoft.Json解析数据出错原因

    今天用NewtonSoft.JSon解析一个天气数据,数据格式如: {"status":1,"detail":"\u6570\u636e\u83b7\ ...

  4. cmd命令 启动 和关闭sql服务

    (1)在操作系统的任务栏中单击“开始”菜单,选择“运行”命令,在下拉列表框中输入“cmd”命令,单击“确定”按钮. (2)输入如下命令,即可通过SQL Server命令行启动.停止或暂停的服务. SQ ...

  5. mysql用户与权限管理笔记

    今天想使用一下李刚那本书上的hibernate的Demo,试出了点问题,过程中就发现mysql的用户管理和权限管理上也有点东西要注意,所以顺便就写一下mysql用户管理和权限管理的笔记. 先说一说my ...

  6. adplayer移植【转】

    本文转载自:https://blog.csdn.net/qq361294382/article/details/50525412 这两天做madplayer移植,由于是刚装的ubuntu14.04,所 ...

  7. 近千节点的Redis Cluster高可用集群案例:优酷蓝鲸优化实战(摘自高可用架构)

    (原创)2016-07-26 吴建超 高可用架构导读:Redis Cluster 作者建议的最大集群规模 1,000 节点,目前优酷在蓝鲸项目中管理了超过 700 台节点,积累了 Redis Clus ...

  8. iOS开发小结 - 让你的APP后台运行

    最近项目有个需求需要让app在后台一直运行计时着,找了一些资料,只能用比较无耻的做法了,播放一段没有声音的音频文件,这样你的APP就不会被系统杀掉~~ 我们只需要用到<AVFoundation/ ...

  9. AI理论学习笔记(一):深度学习的前世今生

    AI理论学习笔记(一):深度学习的前世今生 大家还记得以深度学习技术为基础的电脑程序AlphaGo吗?这是人类历史中在某种意义的第一次机器打败人类的例子,其最大的魅力就是深度学习(Deep Learn ...

  10. JSP数据交互(一)

    1.JSP内置对象 请求对象:request 输出对象:out 响应对象:response 应用程序对象:application 会话对象:session 页面上下文对象:pageContext 页面 ...