• Celery


    1. 什么是Celery?

    Celery 是一个基于python开发的分布式异步消息队列
    
    Celery 的架构由三部分组成,消息中间件(message broker), 任务执行单元(worker)和 任务执行结果存储(task result store)组成。
    

    2. celery 介绍

    1. celery 应用举例

    1. Celery 是一个基于 python 开发的分布式异步消息队列,通过它可以轻松的实现任务的异步任务,
        如果在业务场景中需要用到异步任务,这时可以考虑用 celery。
    
    2. 你想对100台机器执行一条批量命令,可能会花很长时间,但你不想让你的程序等着结果返回,而是你返回 一个任务ID,
        你过一段时间只需要拿着这个任务的id 就可以拿到任务执行结果,在任务执行ing进行时, 你可以继续做其他的事情。
    
    3. celery 在执行任务时需要通过一个消息中间件来接受和发送任务消息,以及存储任务结果,一般使用rabbitMQ or Redis.
    

    2. celery 有什么优点?

    1. 简单:一旦熟悉了celery的工作流程后,配置和使用还是比较简单的。
    
    2. 高可用:当任务执行失败或执行过程中发生连接中断,celery会自动重新执行任务
    
    3. 快速:一个单进程的celery 每分钟可处理上百万个任务。
    
    4. 灵活:几乎celery的各个组件都可以扩展及自定制。
    

    3. celer 基本工作流程图

    user: 用户程序,用于告知celery去执行一个任务

    broker: 存放任务 (依赖RabbitMQ 或 Redis, 进行存储)

    worker: 执行任务

    4. Celery 特性

    1) 方便查看定时任务的执行情况,如  是否成功,当前状态,执行任务花费的时间等。
    
    2) 可选 多进程,Eventlet 和 Gevent 中模型并发执行
    
    3)Celery 是语言无关的,它提供了python 等 常见语言的接口支持。
    

    3. Celery 组件

    1. Celery 扮演生产者和消费者的角色

    Celery Beat : 任务调度器. Beat 进程会读取配置文件的内容, 周期性的将配置中到期需要执行的任务发送给任务队列.

    Celery Worker : 执行任务的消费者, 通常会在多台服务器运行多个消费者, 提高运行效率.

    Broker : 消息代理, 队列本身. 也称为消息中间件. 接受任务生产者发送过来的任务消息, 存进队列再按序分发给任务消费方(通常是消息队列或者数据库).

    Producer : 任务生产者. 调用 Celery API , 函数或者装饰器, 而产生任务并交给任务队列处理的都是任务生产者.

    Result Backend : 任务处理完成之后保存状态信息和结果, 以供查询.

    2. Celery 架构图

    3. 产生任务的方式

    1) 发布者发布任务(WEB 任务)
    
    2)任务调度按期发布任务(定时任务)
    

    4. celery 依赖三个库:这三个库,都由 Celery 的开发者开发和维护。

    billiard: 基于Python2.7 的 multisuprocessing 而改进的库,主要用来提高性能和稳定性。

    librabbitmp: C 语言实现的 Python 客户端。

    kombu: Celery 自带的用来收发消息的库,提供了符合 Python 语言习惯的,使用 AMQP 协议的高级接口。

    4. Celery 的优点?

    高可用。当任务执行失败或者执行过程中发生中断,Celery会自动尝试重新执行任务
    
     快速。一个单进程的celery每分钟可处理上百万个任务
    
     灵活。几乎celery的每个组件都可以被扩展和自定制
    

    5. Django为何使用Celery?

    Django的请求处理过程都是同步的无法实现异步任务,若要实现异步任务处理需要通过其他方式(前端的一般解决方案是ajax操作),
    
    而后台Celery就是不错的选择。倘若一个用户在执行某些操作需要等待很久才返回,这大大降低了网站的吞吐量,
    
    而celery的异步操作可以节约单个视图的响应时间,将IO操作放入异步执行,大大提高视图响应效率
    
  • 相关阅读:
    SourceTree 启动不需要账号
    获取httpservletrequest所有参数的键值对--key-value,用getParameterMap
    ajax 参数出现在Request payload导致request.getParameter(name)是获取不到值
    导出
    替换jar包里面的文件。利用jar ucf
    mysql CPU使用率过高的一次处理经历
    实用小知识
    spring-boot 静态资源自定义配置
    java多线程调用静态方法安全吗?
    spring 注解@Bean
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12273334.html
Copyright © 2020-2023  润新知