美文网首页
消息队列:celery

消息队列:celery

作者: dex0423 | 来源:发表于2020-08-03 22:37 被阅读0次

    1. 什么是 celery

    • Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统;
    • Celery 专注于实时处理的异步任务队列,同时也支持任务调度;
    • Celery 本身不含消息服务,它使用第三方消息服务来传递任务,目前 Celery 支持的消息服务有 RabbitMQ、Redis;
    • Celery 应用是线程安全的,所以多个不同配置、不同组件、不同任务的 应用可以在一个进程空间里共存;
    Celery的架构组成

    Celery的架构由三部分组成,消息中间件(message broker)任务执行单元(worker)任务执行结果存储(task result store) 组成。

    消息中间件

    Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ,Redis,MongoDB(experimental),Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ

    任务执行单元

    Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

    任务结果存储

    Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括 AMQP,redis,memcached,mongodb,SQLAlchemy, Django ORM,Apache Cassandra,IronCache 等。

    这里我先不去看它是如何存储的,就先选用redis来存储任务执行结果。

    因为涉及到消息中间件(在Celery帮助文档中称呼为中间人<broker>),为了更好的去理解文档中的例子,可以安装两个中间件,一个是RabbitMQ,一个redis。

    根据 Celery的帮助文档 安装和设置RabbitMQ, 要使用 Celery,需要创建一个 RabbitMQ 用户、一个虚拟主机,并且允许这个用户访问这个虚拟主机。

    使用场景

    异步任务:将耗时操作任务提交给 Celery 去异步执行,比如发送短信/邮件、消息推送、音视频处理等等

    定时任务:定时执行某件事情,比如每天数据统计

    celery 特点

    celery 在多目录结构中异步执行

    from celery import Celery
    
    cel = Celery('celery_demo',
                 broker='redis://127.0.0.1:6379/1',
                 backend='redis://127.0.0.1:6379/2',
                 # 包含以下两个任务文件,去相应的py文件中找任务,对多个任务做分类
                 include=['celery_tasks.task01',
                          'celery_tasks.task02'
                          ])
    
    # 时区
    cel.conf.timezone = 'Asia/Shanghai'
    # 是否使用UTC
    cel.conf.enable_utc = False
    

    相关文章

      网友评论

          本文标题:消息队列:celery

          本文链接:https://www.haomeiwen.com/subject/ymkbrktx.html