Celery基础介绍

一、Celery的基础介绍

1.celery简介
  • Celery 是一个异步任务队列/基于分布式消息传递的作业队列。其本质是生产者和消费者模式。生产者发送任务到消息队列,消费者负责处理任务。
2.celery 的架构
  • Celery的架构由三部分组成:消息中间件(Broker)、任务执行单元Worker、结果存储(Backend)。
    • 消息中间件Broker:支持RabbitMQ、Redis、Amazon SQS、MongoDB、Memcached 等,官方推荐RabbitMQ
    • 任务执行单元Worker:负责从消息队列中取出任务执行,它可以启动一个或者多个,也可以启动在不同的机器节点,这就是其实现分布式的核心。
    • 结果存储Backend:支持RabbitMQ、 Redis、Memcached,SQLAlchemy, Django ORM、Apache Cassandra、Elasticsearch
      [外链图片转存失败(img-MalJpDak-1564541648070)(quiver-image-url/7B0FBEB3ADECFAD973DEC367F7F7F6A6.jpg)]
3.celery 工作原理
  • 1.任务模块Task包含异步任务和定时任务。
    • 异步任务通常在业务逻辑中被触发并发往消息队列,
    • 定时任务由Celery Beat进程周期性地将任务发往消息队列
  • 2.任务执行单元Worker实时监视消息队列获取队列中的任务执行
  • 3.Woker执行完任务后将结果保存在Backend中
4.安装

由于celery是有python开发,所以可以使用pip包管理工具直接下载
pip install celery

5.使用
  • 不使用配置文件的简单使用

    • 在assets应用模块的__init__.py 创建celery实例
    • tests.py:任务定义文件
    import time
    from assets import app
    
    @app.task
    def add(x, y):
        time.sleep(5)     # 模拟耗时操作
        return x + y
    
    • 启动worker
      celery worker -A assets.tests -l debug
      • worker: 代表启动的角色是worker,当然还有beat等其它角色
      • A: 项目路径,这里我的项目引用路径是assets.tests
      • l: 启动的日志级别,这里我启用了debug级别
        查看日志输出,会发现我们定义的任务
        在这里插入图片描述
    • 现在worker启动了,但是我们需要用delay或apply_async来将任务添加到worker中。这里我们使用交互方式来添加任务,并返回AsyncResult对象,通过AsyncResult对象获取结果.
      [外链图片转存失败(img-LSaAnZOk-1564541648072)(quiver-image-url/9CA1949F4E52F2EC448170221E6DCF11.jpg)]
      • a = add.delay(args),发送任务到队列中
      • ready(): 判断任务是否有结果,返回True or False
      • state:返回任务状态
      • task_id: 返回任务id
      • result: 返回任务结果,同get()方法
      • info: 获取任务信息,默认返回结果
      • successful(): 判断任务是否成功,返回True or False
  • 使用配置文件

    • 这里我把配置文件写在const.py文件,可自行决定写什么文件名(一般config比较见名知意)
      BROKER_URL = 'redis://127.0.0.1:6379/10' # Broker配置,使用Redis作为消息中间件
      
      CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/11' # BACKEND配置,这里使用redis
      
      CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案
      
      CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间
      
      CELERY_TIMEZONE='Asia/Shanghai'   # 时区配置
      
      CELERY_IMPORTS = (     # 指定导入的任务模块,可以指定多个
          'assets.tests',
      )
    
    • 加载配置模块
      [外链图片转存失败(img-JyIl1o1b-1564541648072)(quiver-image-url/ED9EE6C42FDF4CF750FFFEFA01FED833.jpg)]

    • tests.py:定义任务

    import time
    from assets import app
    
    @app.task
    def add(x, y):
        time.sleep(5)     # 模拟耗时操作
        return x + y
    
    • 启动worker, 这里这次试用日志级别为info, 可以看到我们的定义的add任务
      celery worker -A assets.tests -l info
      [外链图片转存失败(img-aGHizMKF-1564541648073)(quiver-image-url/8C27DBE056DCED0DD387C963A4FA6CA4.jpg)]

总结:

  • celery 消息中间件(Broker)、任务执行单元Worker、结果存储(Backend)组成

  • 业务逻辑触发发送任务给消息队列,任务执行单元worker实时监听获取消息队列中的任务执行,worker执行任务后将结果保存在Backen中

  • 应用场景:

    • web应用:当用户在网站进行某个操作需要很长时间完成时,我们可以将这种操作交给Celery执行,比如发送邮件
    • 任务场景:比如在运维场景下需要批量在几百台机器执行某些命令或者任务
    • 定时任务:向定时导数据报表、定时发送通知类似场景
  • 定时任务的使用 下个章节分析

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值