Celery 是一个分布式队列的管理工具,它封装了操作常见任务队列的各种操作,可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列 , 我们使用它可以快速进行任务队列的使用与管理,同时也支持任务调度。

使用原因

程序运行过程中,要执行耗时的任务,但又不想主程序被阻塞,常见的方法是多线程。可是当并发量过大时,多线程压力很大,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的事情。当然也可以使用协程,但是协程毕竟还是在同一线程内执行的,如果一个任务本身就要执行很长时间,而不是因为等待IO被挂起,那其他协程照样无法得到运行。

常见使用场景

开发中经常碰到需要使用异步任务的场景,比如一个WEB请求中有运行时间很长的业务运算,如果不采用异步任务,会阻塞当前的web请求,影响用户体验。我们有多种不同的任务,这些任务优先级不同,比如我们有视频上传和压缩任务等,照片压缩上传等任务还有其他不重要的任务。这些任务耗时需要使用不同的worker去处理。,等到Celery执行完成以后通知用户。在运维场景下需要批量在几百台机器执行某些命令或者任务,此时Celery可以轻松搞定。

Celery的架构组成

一个完整的Celery分布式队列架构应该包含一下几个模块:

Celery由以下三部分构成:任务发布者,任务调度器,消息中间件(Broker)、任务执行单元(Worker)、任务结果存储(Backend),如图:

producer: 任务发布者, 通过调用API向celery发布任务的程序。

celery beat:任务调度器。beat进程会读取配置文件里的内容。(celerybeat_schedule里设置),周期性的将配置中到期需要执行的任务发送到任务队列。 根据配置文件发布定时任务。

Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。接受任务消息,存入队列再按顺序分发给worker执行。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。

Worker 是执行任务的处理单元,实际执行任务的程序,它实时监控消息队列,获取队列中调度的任务,并执行它。

Backend 用来存储Worker执行的任务的结果,Celery存储默认支持包括AMQP, Redis,memcached, MongoDB,Django ORM,SQLAlchemy,等。

安装Celery

可以通过Python包索引(PyPI)或从源安装Celery

要使用pip安装:

pip install Celery

要使用easy_install进行安装:

easy_install Celery

Celery配置

常见的配置有三种方式,以redis为例BROKER_URL = 'redis://ip(地址):6379/0'。celery broker 的地址和选择的 redis db,默认是 0。

第一种:

第二种:

第三种:

config中指定broker_ur和result_backend

app = Celery('tasks')

app.config_from_object('config')

添加异步任务(task)

使用@app.task() 添加task

测试代码:

@app.task()

def add_test(x, y):

return x + y

Celery 启动

测试代码:

if __name__ == "__main__":

app.start()

或在shell中执行:

celery worker -A task -l info

参数:-A 选项指定 celery 实例 app 的位置, 可以直接指定:

celery worker -A task.app -l info

-l 选项指定日志级别, -l 是 --loglevel 的缩略形式。

Celery监控

celery flower是python的用于监控celery的模块。比如可以在web页面实时显示celery worker的状态、任务的状态等,flower还提供了REST API用于方便第三方应用直接触发任务执行、获取任务执行结果等,这也极大地扩展了celery的应用范围,比如一个Java应用也可以通过flower的REST接口使用celery的异步任务系统。

Celery集成flask

创建celery的实例对象的名字必须是flask应用程序app的名字,否则celery启动会失败。

安装Flask-Celery-Helper

pip install Flask-Celery-Helper

测试例子:

Celery集成djongo

安装依赖库

pip install django

pip install django-celery

pip install celery-with-redis

测试例子:

celery java_Celery(分布式任务队列) 的使用方法总结相关推荐

  1. Celery分布式任务队列的认识和基本操作

    一.简单认识 Celery是由Python开发.简单.灵活.可靠的分布式任务队列,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务.Celery侧重于实时操作,但对调度支持也很好 ...

  2. [源码解析] 并行分布式任务队列 Celery 之 多进程架构和模型

    [源码解析] 并行分布式任务队列 Celery 之 多进程架构和模型 文章目录 [源码解析] 并行分布式任务队列 Celery 之 多进程架构和模型 0x00 摘要 0x01 Consumer 组件 ...

  3. python任务队列 http_基于Python开发的分布式任务队列:Celery

    Celery (芹菜)是基于Python开发的分布式任务队列.它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度. 架构设计. Celery的架构由三部分组成,消息中间件(message ...

  4. 分布式任务队列 Celery — 深入 Task

    目录 文章目录 目录 前文列表 前言 Task 的实例化 任务的名字 任务的绑定 任务的重试 任务的请求上下文 任务的继承 前文列表 分布式任务队列 Celery 分布式任务队列 Celery -- ...

  5. 分布式任务队列 Celery — 应用基础

    目录 文章目录 目录 前文列表 前言 Celery 的周期(定时)任务 Celery 的同步调用 Celery 结果储存 Celery 的监控 Celery 的调试 前文列表 分布式任务队列 Cele ...

  6. 分布式任务队列 Celery — 详解工作流

    目录 文章目录 目录 前文列表 前言 任务签名 signature 偏函数 回调函数 Celery 工作流 group 任务组 chain 任务链 chord 复合任务 chunks 任务块 map/ ...

  7. 分布式任务队列 Celery — Overview

    #目录 文章目录 前言 简介 Celery 的应用场景 架构组成 Celery 应用基础 前言 分布式任务队列 Celery,Python 开发者必备技能,结合之前的 RabbitMQ 系列,深入梳理 ...

  8. 54 分布式任务队列Celery

    随着信息时代的持续发展,越来越复杂的业务需求对自动化运维的要求上了一个新的台阶,任务调度系统也由单一主机任务调度系统向分布式任务调度系统过度.无论是业务层面的作业调度还是运维本身的作业调度需求,分布式 ...

  9. python 分布式队列_〖Python〗-- Celery分布式任务队列

    [Celery分布式任务队列] 一.Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步 ...

  10. Celery 分布式任务队列快速入门

    Celery 分布式任务队列快速入门 本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置cel ...

最新文章

  1. ADAS感知算法观察
  2. shell中的函数及脚本调试方法
  3. Apple Pay和Samsung Pay可以支付BCH了
  4. c++多元线性回归_五种优化算法实现多元线性回归
  5. Oracle 11g R2 RAC 高可用连接特性
  6. 联想杯 - Gentle Jena(单调栈)
  7. 如何让 C++ 和 C# 一样易用,而且效率更高?
  8. count(1),count(*),count(rowid)
  9. Typecho安装后后台界面和文章链接均为404错误的解决方法
  10. 使用画图软件gunplot出现的问题和解决办法
  11. 两百个jQuery插件集合
  12. java 调用tomcat api,tomcat处理http请求-下
  13. 《PWM整流器及其控制》读书笔记—第三章—电压型PWM整流器
  14. 1024: 例题3-2 计算存款利息
  15. [Objective-C] 010_Foundation框架之NSSet与NSMutableSet
  16. UDS——ISO14229
  17. Istio Egress Gateway出口流量管理
  18. 关于C++、C#实现EXCEL数据库批量导入数据库万行以上数据效率问题
  19. 华为云linux登录用户名密码,华为云Linux服务器安装宝塔Linux面板详细图文教程
  20. SM4加密算法原理以及C语言实现

热门文章

  1. django初体验 学习笔记
  2. Lua 学习笔记(七)编译、执行外部代码块
  3. 讲座资源:ASP.NET AJAX 体验
  4. 【VC++类型转换】CString和System::String类型的转换
  5. 【python】opencv、PIL、gdal读取tif高分遥感影像比较
  6. GIS案例练习-----------第一天
  7. python模块导入三种方式
  8. esayexcel导出动态表头数据
  9. 2 java内存模型是什么_java中内存模型是什么?有什么用?
  10. JavaEE学习10--Ajax