继续尝试没有时间弄明白的技术。

celery官方文档地址:http://docs.celeryproject.org/en/stable/getting-started/introduction.html#get-started。

IBM描述参考地址:http://www.ibm.com/developerworks/cn/opensource/os-cn-celery-web-service/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral#authorN10015

简单的说,可以理解celery是帮助你把一些指定的工作异步化,不用等待io的工具。

比如要发十条短信,需要10秒。如果线性操作,就得等待到短信全部发送完毕之后,再开始执行下面的代码,如果中间某一个死了,你的用户就会呆呆的等待,直到操作超时,这种体验是非常糟糕。如果再amazon买过书都知道,当你在付款完毕之后,马上跳转回来去看你的支付结果,这个时候可能状态还并未做刷新。因为你的付款操作钱虽然打出去了,实际上还在轮流排队支付,这个时候你可以出去刷个微博,然后再回来看你的付款情况,多半都已经会显示支付完毕了这就是异步的好处。

而celery就是为了解决这种问题存在的。

以前一直无法理解这种系统存在的意义和中间人broker扮演的关系。实际上,celery自己就是一个队列系统,但是同时她又无法将存储在队列的消息通知任何人,她需要一个中间人帮忙做这个事情,redis,rabbitmq就做了这个消息传递的中间人。所以处理流程是这样,当我们生产了一个消息,celery将消息放入队列并且中间人redis拿到消息之后将消息拿给空闲的worker进行处理。当我们产生一个异步消息的时候,就是把这个处理放到队列中去排队,最后由worker进行执行。而放这个消息的人并不会等待,会直接返回。而这边消息队列的消息处理完毕之后会以回调的形式回传给发送消息的人。当然这个回调同样有两种方式,用rpc存数据库什么的都是可以的。

这篇文章的重点并不在如何使用上,而是在记录配置上面,关于如何具体使用的流程,IBM那哥们的文章写得非常清楚。

首先在ubuntu上

pip install celery # 安装celery

然后安装redis的python客户端

pip install redis # 安装redis客户端

然后在ubuntu服务器上安装redis数据库

apt-get install redis

然后开始配置celery运行。这里我使用celery的默认配置来跑celery以简化步骤

首先创建一个tasks.py的python脚本,这个脚本里 带着一个会被发送到celery执行的异步任务函数。

from celery import Celery

app = Celery('tasks', broker='redis://localhost')

@app.task
def hello():
return 'hello world'

这里注意,如果你的redis是用密码的 broker的格式就会是这样

app = Celery('tasks', broker='redis://:password@localhost')

不然会连接失败。

然后使用一个worker监视这个任务是否被调用。

celery -A tasks worker

-A是指明app名字的意思。

这个时候成功会出现这样的情况

当你看到celery@xxxx ready的时候 就是你的监控woker启动起来了。这个界面是woker的一个控制台。

之后可以写一个调用生产消息。这里我重新写一个脚本并且调用上面的hello函数。

from tasks import add

def notify(a, b):
result = add.delay(a, b)
return result if __name__ == '__main__':
print notify(6, 7)

这里调用的add.delay(a, b)会返回一个task的唯一id,如果我们设了backend  那么我们可以拿着这个返回的唯一id异步取得这个值。

这个将在下篇文章详细介绍。

ubuntu 环境 celery配置全解的更多相关文章

  1. ubuntu环境eclipse配置

    ubuntu环境eclipse配置 首先下载Eclipse和JDK: 然后将上边两个压缩包解压到安装文件夹(如;/home/linux/softwares/java).然后配置/etc/profile ...

  2. Ubuntu环境下配置Android Studio【转】

    本文转载自:https://www.jianshu.com/p/1f6295f9c955 之前学习Android开发的时候,一直跟各种教程一样,使用的是Eclipse+ADT,主要是比较方便,容易上手 ...

  3. JAVA环境变量配置详解(Windows)

    JAVA环境变量配置详解(Windows)   JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解  Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLA ...

  4. Ubuntu环境下配置GCC

    Ubuntu网络环境下安装GCC及其头文件步骤: 1.Ubuntu环境下配置GCC 刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装 ...

  5. 在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools

    在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools 网站有提示: The install script won't work, but you can copy ...

  6. Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  7. 超详干货!Linux 环境变量配置全攻略

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux环境变量配置 在自定义安装软件的时候,经常需要 ...

  8. java 环境变量配置 详解!

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 在Ubuntu环境下配置Proxmark3(PM3)使用环境

    参考资料:PM3官方Wiki 因为国内网络上大多是在Kali系统上使用PM3的教程(链接1.链接2.链接3),而这些教程的步骤对于Ubuntu系统并不完全适用.所以写下本文,记录我个人的安装经历. 本 ...

随机推荐

  1. cryptopunks测试代码cryptopunksmarket-setinitial.js

    require('babel-polyfill'); //测试用例要在执行完了truffle compile和truffle migrate后才能使用truffle test来进行测试 //要注意ar ...

  2. Spark学习之JavaRdd

    RDD 介绍 RDD,全称Resilient Distributed Datasets(弹性分布式数据集),是Spark最为核心的概念,是Spark对数据的抽象.RDD是分布式的元素集合,每个RDD只 ...

  3. MP实战系列(四)之DAO讲解

    说到DAO不得不提一个开发名词"三层架构",所谓的三层架构是什么呢?简单的可以概括为数据访问层,业务逻辑层,界面层(又称表现层). 这也是我们Java开发常用的手段,经常有人将三层 ...

  4. webpack4升级extract-text-webpack-plugin和UglifyJsPlugin问题

    webpack4升级extract-text-webpack-plugin和UglifyJsPlugin问题 1.  使用了extract-text-webpack-plugin插件后,编译出错,代码 ...

  5. PAT A1073 Scientific Notation (20 分)——字符串转数字

    Scientific notation is the way that scientists easily handle very large numbers or very small number ...

  6. 推荐几本对于Python初学者比较好的书籍(内含PDF)

    我们提供一个初学者最好的Python书籍列表.Python是一个初级程序员可以学习编程的最友好语言之一.为了帮助您开始使用Python编程,我们分享此列表.泡一杯茶,选一本书阅读,开始使用Python ...

  7. 【LeetCode232】 Implement Queue using Stacks★

    1.题目描述 2.思路 思路简单,这里用一个图来举例说明: 3.java代码 public class MyQueue { Stack<Integer> stack1=new Stack& ...

  8. Zookeeper-基本概念

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务.它是一个典型的分布式数据一致性的解决方案,分布式应用可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理 ...

  9. Socket入门笔记 用TcpClient实现一个简易聊天室

    效果 实现思路 使用TcpListener建一个服务器,接收所有客户端发送的消息,然后由服务器再发送到其他客户端 客户端使用TcpClient,发消息给服务器,接收服务器的消息,不和其他客户端直接交互 ...

  10. Spring Zuul 性能调优,如何提升平均响应时间200% ?

    最近负责公司的 Gateway 项目,我们用 Spring Zuul 来做 HTTP 转发,但是发现请求多的时候,AWS 的健康检查就失败了,但是实际上程序还在跑,在日志上也没有任何东西错误打印出来出 ...