ubuntu 环境 celery配置全解
继续尝试没有时间弄明白的技术。
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配置全解的更多相关文章
- ubuntu环境eclipse配置
ubuntu环境eclipse配置 首先下载Eclipse和JDK: 然后将上边两个压缩包解压到安装文件夹(如;/home/linux/softwares/java).然后配置/etc/profile ...
- Ubuntu环境下配置Android Studio【转】
本文转载自:https://www.jianshu.com/p/1f6295f9c955 之前学习Android开发的时候,一直跟各种教程一样,使用的是Eclipse+ADT,主要是比较方便,容易上手 ...
- JAVA环境变量配置详解(Windows)
JAVA环境变量配置详解(Windows) JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLA ...
- Ubuntu环境下配置GCC
Ubuntu网络环境下安装GCC及其头文件步骤: 1.Ubuntu环境下配置GCC 刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装 ...
- 在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools
在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools 网站有提示: The install script won't work, but you can copy ...
- Linux环境变量配置全攻略
Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...
- 超详干货!Linux 环境变量配置全攻略
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux环境变量配置 在自定义安装软件的时候,经常需要 ...
- java 环境变量配置 详解!
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在Ubuntu环境下配置Proxmark3(PM3)使用环境
参考资料:PM3官方Wiki 因为国内网络上大多是在Kali系统上使用PM3的教程(链接1.链接2.链接3),而这些教程的步骤对于Ubuntu系统并不完全适用.所以写下本文,记录我个人的安装经历. 本 ...
随机推荐
- k8s访问服务时,解析不了域名
1)访问 http://eureka-server-0.eureka-server:8101/eureka 出现UnknowHostExecption异常 2)问题定位kube-dns问题 3)doc ...
- 利用python scapy包进行抓包发包与ARP扫描
小技巧 通过在交互式的python解释器下,可以通过help()函数查看函数或模块的用途. dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表 ...
- ESP32 DAC
ESP32有两个DAC通道,通道1链接GPIO25, 通道2链接GPIO26; 当DAC设置为 “built-in DAC mode”的时候,I2S可以通过DAC发送数据: 使用示例: dac_out ...
- 【Codeforces 467D】Fedor and Essay
Codeforces 467 D 题意:给\(m\)个单词,以及\(n\)个置换关系,问将\(m\)个单词替换多次后其中所含的最少的\(R\)的数量以及满足这个数量的最短总长度 思路:首先将置 ...
- android 解决ScrollView中的子布局不能够填充整个ScrollView的情况。
在开发中如果你的xml文件的跟布局是ScrollView,在ScrollView中无论你写什么样的布局,其默认情况下都是不能填充整个布局的.也就是说你的ScrollView中的子布局设置fill_pa ...
- lesson 4:凯撒密码问题
一·问题描述 二·解决过程 1.设计思路 ①人机交互界面 ②加密函数(将字符串的每一个字符提取出来,通过对字符的阿斯克码值进行运算操作实现加密过程,特殊的特殊对待) ③解密函数(与加密函数算法类似) ...
- 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)
http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...
- sql语句,查询昨天的数据
如果在程序中,有前台传来两个时间点:beginTime和endTime,在sql查询中的限制条件就是查询昨天的数据,那么可以这样写: 但是如果在这里要查询昨天的数据的话, 则不能简单地在开始时间的那里 ...
- python语言程序设计5
1, 评估函数eval() 去掉参数最外侧引号并执行余下语句的函数. 比如eval("1"),经过运行可以得到数字 1 去得是单双引号,不是括号哦.. 广泛来说,能将任何字符串的形 ...
- vim命令记录
最近开始用vim作为日常编辑器,由于vim的命令过多,现在记录一下