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

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. rac添加新节点的步骤与方法2

    上一篇文章,把节点删除了.这次新增加一个节点 .新增加的节点是host03.如下: #Public IP192.168.16.45 racdb1192.168.16.46 racdb2192.168. ...

  2. PAT A1155 Heap Paths (30 分)——完全二叉树,层序遍历,特定dfs遍历

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  3. Python/Jupyter Notebook以及可视化的运用

    最近陆陆续续使用Jupyter Notebook和Python可视化做了一些小工具,用于提高开发效率. 这里将其归类总结一下,作为学习的记录.

  4. Redis缓存的使用

    首先需要去Redis官网下载Redis的安装包 要在eclipse中使用Redis还需要两个jar包,需要的自行查找或者联系我 运行Redis需要开启Redis的服务端,也就是下载的安装包中的“red ...

  5. c语言学习5

    break 和 continue之间的区别: 在1000人中,募捐100000元,当达到10万元后结束   break 跳出当前循环,即  是终止循环,continue结束本次循环,不终止循环 #in ...

  6. C# 队列和栈 线程安全

    队列是其元素以先进先出(FIFO)的方式来处理集合,先入队的元素会先读取. 栈是和队列非常类似的另一个容器,栈和队列最大的区别是后进先出(LIFO),也可以说成先进后出. 队列在现实生活中的例子数不胜 ...

  7. WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型

    首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...

  8. Luogu P2279 [HNOI2003]消防局的设立

    这真的是一道SB题.去你的树形DP 我们看到题目就开始考虑贪心,怎么搞? 一个显然的思路,每次找出一个深度最大且未被覆盖的点,然后建一个消防局? 但这样的话,动用简单的人类思维就可以知道:我TM的还不 ...

  9. [Python]Python 函数调用小例子

    函数定义: In [78]: def printme(str): ....: print str ....: return ....: 调用: In [79]: printme('This is Ji ...

  10. 手机H5移动端WEB资源整合之meta标签

    一.相关网站使用meta的实例 youku首页的Meta设置: <meta charset="utf-8"> <meta http-equiv="X-U ...