>Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。它是一个专注于实时处理的任务队列,同时也支持任务调度。Celery 是语言无关的,虽然它是用 Python 实现的,但他提供了其他常见语言的接口支持。

###Celery 结构
网上找到一张用得最多的图
![](http://static.open-open.com/lib/uploadImg/20150314/20150314100608_187.png)
下面针对图中的每一部分做解释:
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
####消息中间件(broker)
一个消息传输的中间件。每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,执行相应程序。也就是消费者和生产者之间的桥梁,
另外Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。
######连接字符串:
RabiitMQ使用amqp://localhost
Redis使用redis://localhost

####任务执行结果存储(backend)
backend: 用于存储这些消息以及celery执行的一些消息和结果,以此用来确认对方是否接受了。
####任务执行单元(worker)
worker: Celery类的实例,作用就是执行各种任务
###Celery 安装
目前,Windows使用celery只能安装 3.1.25版,linux就可以安装4.0以上的了,这里以Windows为例。
#####安装
```
pip install celery==3.1.25
```
先来一个简单例子
使用官网上的例子,然后把broker的信息改好,这里我们使用redis
首先在D:\CeleryDemo新建一个文件叫task.py输入以下代码。在输入之前确保redis服务是启动的。
```
from celery import Celery
app = Celery('tasks', backend='redis://localhost:6379/0', broker='redis://localhost:6379/0') #配置好celery的backend和broker
@app.task #普通函数装饰为 celery task
def add(x, y):
return x + y
```
通过上面简单的代码broker 我们有了,backend 我们有了,task 我们也有了,现在就该运行 worker 进行工作了,在 task.py 所在目录下运行:
```
celery -A task worker --loglevel=info
```
意思就是运行 task 这个任务集合的 worker 进行工作(当然此时broker中还没有任务,worker此时相当于待命状态)
![](https://images2018.cnblogs.com/blog/736399/201803/736399-20180319233435036-1805997140.png)
最后一步,触发任务,最简单方式就是在task.py所在目录下写一个trigger.py调用被装饰成 task 的函数:
```
from task import add
import time
result = add.delay(4, 4) #不要直接 add(4, 4),这里需要用 celery 提供的接口 delay 进行调用
while not result.ready():
time.sleep(1)
print ('task done: {0}'.format(result.get()))
```
运行之后可以看到
![](https://images2018.cnblogs.com/blog/736399/201803/736399-20180319233818548-1193167438.png)
好了,恭喜你已经入门了。

celery学习之入门的更多相关文章

  1. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  2. [IT学习]sql 入门及实例

    sql 是一种数据库查询语言,可以让你很快的查询到数据.其实一般情况下,你也可以采用excel来查询数据库数据. 但是人们通常认为sql会更加灵活和方便一些. sql学习的入门网站: http://w ...

  3. celery 学习笔记 01-介绍

    celery 学习笔记 01-介绍 celery 是 python 中的常用的任务队列框架,经常用于异步调用.后台任务等工作.celery 本身以 python 写,但协议可在不同的语言中实现,其它语 ...

  4. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  5. PHP学习笔记 - 入门篇(4)

    PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...

  6. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  7. PHP学习笔记--入门篇

    PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...

  8. netty深入学习之一: 入门篇

    netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...

  9. LESS学习笔记 —— 入门

    今天在网上完成了LESS的基础学习,下面是我的学习笔记.总共有三个文件:index.html.main.less.mian.css,其中 mian.css 是 main.less 经过Koala编译之 ...

随机推荐

  1. Eclipse搭建Maven项目之准备工作

    Maven是优秀的Java项目对象模型解决方案,意为知识的积累(意地绪文),Maven可以方便的解决Java项目包依赖问题,通过配置pom.xml引入依赖,并自动引入其他依赖. 操作系统版本:wind ...

  2. c++ 如何把RGB图像转换成HSV图像?

    CV_<bit_depth>(S|U|F)C<number_of_channels> 1--bit_depth---比特数---代表8bite,16bites,32bites, ...

  3. POJ - 3268 单源最短路

    题意:给定一些有向边,以及一个目的地,从某个点到达目的地,再从目的地回到那个点.共有n个点,问这n个点花费最大是多少? 思路:从目的地回去直接把目的地作为源点即可.那么从某个点到达目的地应该如何得到最 ...

  4. spring boot admin + spring boot actuator + erueka 微服务监控

    关于spring boot actuator简单使用,请看 简单的spring boot actuator 使用,点击这里 spring boot admin 最新的正式版本是1.5.3 与 spri ...

  5. Java多线程,判断其他线程是否结束的方法

    方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join ...

  6. 百度地图API-javascript-web地图的应用

    html部分的代码 <div class="maxwidth"> <div class="address clearfix"> < ...

  7. caffe︱ImageData层、DummyData层作为原始数据导入的应用

    Part1:caffe的ImageData层 ImageData是一个图像输入层,该层的好处是,直接输入原始图像信息就可以导入分析. 在案例中利用ImageData层进行数据转化,得到了一批数据. 但 ...

  8. 【memcache】windos下 memcache更改默认的端口和最大使用内存

    1>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上 2>修改端口,如改为11200 3>分配内存, ...

  9. Django学习-21-表关系参数

    一对多关系 ForeignKey(ForeignObject) # ForeignObject(RelatedField) to, # 要进行关联的表名 to_field=None, # 要关联的表中 ...

  10. 翻译--Thinking in React

    无聊翻译篇react入门文章,去年学习react时看了一遍,很不错的一篇文章. https://reactjs.org/docs/thinking-in-react.html 部分为意译,旨在让new ...