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

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. Linux 之 rsyslog 系统日志转发

    一.rsyslog 介绍 ryslog 是一个快速处理收集系统日志的程序,提供了高性能.安全功能和模块化设计.rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,据官网介绍 ...

  2. Spring Security 用户认证原理分析

    本文基于 spring-security-core-5.1.1 和 tomcat-embed-core-9.0.12. 核心原理 用户通过 username 和 password 登录时,后端会经过一 ...

  3. <操作系统>内存管理

    单道程序设计:内存被划分为两部分:一部分供操作系统使用,另一部分供当前正在执行的程序使用. 多道程序设计:内存中进一步细分用户部分,以满足多个进程的要求. 内存管理的需求: 重定位:程序从磁盘换入内存 ...

  4. Python将数据渲染到docx文档指定位置

    超简单Python将指定数据插入到docx模板渲染并生成 最近有一个需求,制作劳动合同表,要从excel表格中将每个人的数据导入到docx劳动合同中,重复量很大,因此可以使用python高效解决.为了 ...

  5. 理解Path对路径进行操作的API

    阅读目录 一:理解normalize方法 二:理解join方法 三:理解dirname方法 四:理解basename方法 五:理解extname方法 回到顶部 一:理解normalize方法 该方法将 ...

  6. 使用Mongoose类库实现简单的增删改查

    使用Mongoose类库实现简单的增删改查 Mongoose是在nodejs环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为javascript对象供我们使用. M ...

  7. 关于Nginx

    访问 www.a.com 自动跳到 www.b.com(301跳转设置) server { listen 80; server_name www.a.com; rewrite ^/(.*)$  htt ...

  8. java 文件字节和字符流 缓冲流

    流的原理 1) 在 Java 程序中,对于数据的输入/输出操作以“流”(stream) 方式进行:2) J2SDK 提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据 ...

  9. Android 解决在初次打开Activity加载布局文件时,ScrollView滚动条不在顶部的问题

    出现这种问题的情况列举:ScrollView中嵌套有(包括自定义)的ListView,GridView时,会出现这种情况 解决办法: 1.在布局加载时让ScrollView上面的那个控件聚焦,具体做法 ...

  10. [10] AOP的注解配置

    1.关于配置文件 首先在因为要使用到扫描功能,所以xml的头文件中除了引入bean和aop之外,还要引入context才行: <?xml version="1.0" enco ...