Celery 结构,组件

什么是 Celery?

Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统

专注于实时处理的异步任务队列

同时也支持任务调度

celery 架构

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

消息中间件

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等

任务执行单元

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

任务结果存储

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等

Celery 组件

Celery 扮演生产者和消费者的角色
  • Producer :
    任务生产者. 调用 Celery API , 函数或者装饰器, 而产生任务并交给任务队列处理的都是任务生产者。

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

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

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

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

使用场景

  • 异步任务:
    发邮件、发送消息
    自动化工单中耗时任务
    所有需要异步处理的请求都可以

  • 定时任务:
    工单系统定时获取超时工单进行延时报警
    对过期会员进行清理

celery应用举例

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

  2. 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情

  3. Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis

Celery的优点

  1. 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的

  2. 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务

  3. 快速:一个单进程的celery每分钟可处理上百万个任务

  4. 灵活: 几乎celery的各个组件都可以被扩展及自定制

Celery基本工作流程图

~~~~~~~~~~~~~`

user:用户程序,用于告知celery去执行一个任务。
broker: 存放任务(依赖RabbitMQ或Redis,进行存储)
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 5.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 2.6: Celery series 3.1 or earlier.
        Python 2.5: Celery series 3.0 or earlier.
        Python 2.4 was Celery series 2.2 or earlier.

    Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.

如果使用python版本不支持 ↓

解决版本问题:

在 celery 官方的提议下,建议将 async 文件的文件名改成 asynchronous

C:\Python37\Lib\site-packages\kombu\async

C:\Python37\Lib\site-packages\celery\utils\timer2.py
C:\Python37\lib\site-packages\celery\concurrency\asynpool.py
C:\Python37\lib\site-packages\celery\worker\components.py
C:\Python37\lib\site-packages\celery\worker\autoscale.py
C:\Python37\lib\site-packages\celery\worker\consumer.py

以下的文件都有 async 的导包,我们将里面的导报都改成 asynchronous

猜你喜欢

转载自blog.csdn.net/weixin_47587864/article/details/108521569