Celery详解(3)
1.什么是Celery?
Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统
专注于实时处理的异步任务队列,同时也支持任务调度
2.Celery架构
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等
任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等
执行流程:
user相当于提交任务的人,提交给broker也就是消息中间件,worker相当于工人,broker里面有了用户也就是程序提交的任务,worker就去取出来执行类似于生产者消费者模型,store说简单点就是worker执行结束后的返回结果
版本支持情况

Celery version 4.0 runs on
Python ❨2.7, 3.4, 3.5❩
PyPy ❨5.4, 5.5❩
This is the last version to support Python 2.7, and from the next version (Celery .x) Python 3.5 or newer is required.If you’re running an older version of Python, you need to be running an older version of Celery: Python </span><span style="color: #800080;">2.6</span>: Celery series <span style="color: #800080;">3.1</span><span style="color: #000000;"> or earlier.
Python </span><span style="color: #800080;">2.5</span>: Celery series <span style="color: #800080;">3.0</span><span style="color: #000000;"> or earlier.
Python </span><span style="color: #800080;">2.4</span> was Celery series <span style="color: #800080;">2.2</span><span style="color: #000000;"> or earlier. Celery </span><span style="color: #0000ff;">is</span> a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.</pre>
注:Celery不支持windows但并不是不可以使用可以用第三方模块来完成,但是windows上使用出了问题官方不会提供帮助
3.Celery的安装配置
pip install celery
消息中间件:RabbitMQ/Redis
app=Celery('任务名',backend='xxx',broker='xxx')
4.测试案例

# 先导入
from celery import Celery # 下面是配置信息,这里使用redis为列broker='redis://127.0.0.1:6379/2' 不加密码
消息中间件
backend = 'redis://:lmdxxx@139.196..:6380/7'
# 处理结果
broker = 'redis://:lmdxxx@139.196..:6380/8'
# 注:redis有密码的情况下前面加@输入密码即可,最后面的是指定储存在redis的那个库中
# 实列话产生一个对celery象,一个项目中可能会用到多个Celery第一个参数是当前任务的名字,一定要写
APP = Celery('test', broker=broker, backend=backend)

1.首先没得说了肯定要先导入celery,上文说了selery有消息中间件,处理者,结果存储,这里使用redis来作为测试
2.配置消息中间件,配置结果储存位置
APP = Celery('test', broker=broker, backend=backend)
# 实列话产生一个对celery象,一个项目中可能会用到多个Celery,所以在第一个参数中传入指定的名称,不可以重复
# 对象名称无所谓
3.创建一个selery任务

# 任务其实就是一个函数
# 需要用一个装饰器去装饰才能说明这是一个被celery管理的任务,且可以用celery执行
# 装饰器实际就是实列化出来的那个对象,里面的一个固定方法
@APP.task
def add(x, y):
import time
time.sleep(2)
return x + y

4.创建一个用于提交任务的
正常同步提交任务
提交任务不执行,有worker才会去执行
注:得到的这个ID其实我们工作中可以把它set到cookie中,用户就可以通过轮询去查询redis数据库中去寻找结果
也可以直接return返回给前端,给前端处理
返回的对应的是存放redis中间件里面的提交任务属性的ID用于查询返回结果,看不懂没关系
5.任务提交任务后需要创建工人执行任务
创建py文件:run.py,执行任务,或者使用命令执行(win不可以使用):celery worker -A celery_task_cs -l info (celery_test_cs是创建任务的那个名字 -l info是打印的日志级别)
windows下:celery worker -A celery_test_cs -l info -P eventlet
win安装:pip install eventlet
代码执行通常不用:
from celery_app_task import cel
if __name__ == '__main__':
cel.worker_main()
# cel.worker_main(argv=['--loglevel=info')
提交任务的时候注意导入方式,有时候导入方式问题会产生报错
启动后如下:
收到任务后分配任务切返回执行信息 7 就是我们的执行结果 前面的就是执行的时间 这个是info级别的日志打印的
redis 存放结果数据如下,执行状态 结果 之类都在里面
6.查看结果
流程梳理:
celery的使用
1.先安装 pip install celery
2.写一个py文件:celery_task
3.指定broker(消息中间件),指定backend(结果存储)
4.实例化产生一个Celery对象 app=Celery('名字',broker,backend)
5.加装饰器绑定任务,在函数(add)上加装饰器app.task
6.其他程序提交任务,先导入add,add.delay(参数,参数),会将该函数提交到消息中间件,但是并不会执行,有个返回值,直接print会打印出任务的id,以后用id去查询任务是否执行完成
7.启动worker去执行任务:
linux:celery worker -A 创建的任务的那个py文件 -l info
windows下:celery worker 创建任务的那个py文件 -A -l info -P eventlet
8.查看结果:根据id去查询
应用场景
异步任务:将耗时操作任务提交给Celery去异步执行,比如生成图表,发送短信/邮件、消息推送、音视频处理等等
定时任务:定时执行某件事情,比如每天数据统计
Celery详解(3)的更多相关文章
- celery详解
目录 Celery详解 1.背景 2.形象比喻 3.celery具体介绍 3.1 Broker 3.2 Backend 4.使用 4.1 celery架构 4.2 安装redis+celery 4.3 ...
- Celery详解(2)
除了redis,还可以使用另外一个神器----Celery.Celery是一个异步任务的调度工具. Celery是Distributed Task Queue,分布式任务队列,分布式决定了可以有多个w ...
- Celery详解(1)
在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...
- 分布式任务队列 Celery —— 详解工作流
目录 目录 前文列表 前言 任务签名 signature 偏函数 回调函数 Celery 工作流 group 任务组 chain 任务链 chord 复合任务 chunks 任务块 mapstarma ...
- Python 定时任务框架 APScheduler 详解
APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...
- Sentry 监控 - 私有 Docker Compose 部署与故障排除详解
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Dockerfile 命令详解及最佳实践
Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
随机推荐
- 剑指Offer-24.二叉树中和为某一值的路径(C++/Java)
题目: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的 ...
- 剑指Offer-7.斐波那契数列(C++/Java)
题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 分析: 斐波那契数列是0,1,1,2,3,5,8,13...也就是当前 ...
- 第九周周二总结&&第九周周三计划
周二的主题提取使用LDA模型进行了简单的测试,效果还可以.主要是提取的分词的结果,LDA:随机生成文章各个主题比例,再根据各个主题随机生成词,词与词之间的顺序关系被彻底忽略了,这就是LDA眼中世间所有 ...
- luoguP2597 [ZJOI2012]灾难
题意 这题思路好奇怪啊 见到有向无环图显然是要拓朴排序,不妨按照被吃向吃连边,那么\(x\)灭绝当且仅当x的入点都灭绝,于是考虑怎样x的入点都灭绝 比如4号节点,它灭绝当且仅当2和3灭绝,2和3灭绝当 ...
- 通过 Beautiful Soup 4 预防 XSS 攻击
通过beautifulsoup4预防XSS攻击 借助beautifulsoup4将用户输入内容进行过滤 实际使用时需要采用单例模式 步骤: 实例化对象,对页面进行解析 查找目标标签 将非法标签进行清空 ...
- 1+x证书Web前端开发CSS3详细教程
web 前端开发之 CSS3 新特性 http://blog.zh66.club/index.php/archives/189/ web 前端开发之 html5 新特性 http://blog.zh6 ...
- @Resource和@Autowire用谁?
我选了@Resource 1.当注入的属性是接口 1.1在接口只有一个实现类的时候,@Resource和@Autowire 在功能上是没有区别的 1.2如果接口有多个实现类,在写法上,@Autowir ...
- 如何让 FFmpeg 支持异步并行转码、截图等等操作?
直接贴代码了: ffmpegTest02.cs public partial class ffmpegTest02 : FormBase { private static readonly strin ...
- DVWA-文件包含学习笔记
DVWA-文件包含学习笔记 一.文件包含与漏洞 文件包含: 开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含. 文件包含漏洞: 开发人 ...
- JSTL+EL表达式+JSP自定义框架案例
不会框架不要紧,我带你自定义框架 前言:这标题说的有点大了,当一回标题党,之前在学JSP的时候提到了JSTL和EL表达式,由于一直钟情于Servlet,迟迟没有更新别的,这回算是跳出来了.这回放个大招 ...