收藏本站 设为首页

Python 神器 Celery 源码阅读 (5)

编辑:admin 日期:2021-12-15 02:05 分类:冷油器 点击:
简介:中秋假期火车票今起开售 12306网站升级 , 广州市白云区龙昌货架厂与被执行人广州橘米全屋品牌策划有限公司 ,Celery是一款非常简单、灵活、可靠的分布式系统,可用于处理大量消息,并且提供了一整套操作此系统的工具。Celery 也是一款消息队列工具,可用于

  中秋假期火车票今起开售 12306网站“升级”广州市白云区龙昌货架厂与被执行人广州橘米全屋品牌策划有限公司,Celery是一款非常简单、灵活、可靠的分布式系统,可用于处理大量消息,并且提供了一整套操作此系统的工具。Celery 也是一款消息队列工具,可用于处理实时数据以及任务调度。

  基本扫清celery的基础库后,我们正式进入celery的源码解析,本文包括下面几个部分:

  正常情况下,可以看到worker正常启动。启动的时候会显示一些banner信息,包括AMQP的实现协议,任务等:

  再开启一个终端窗口,作为client执行下面的代码, 可以看到add函数正确的执行,获取到计算 16+16 的结果 32 。注意: 这个过程是远程执行的,使用的是 delay 方法,函数的打印 print(add, x, y) 并没有输出:

  在redis的monitor窗口,也可以可以看到类似的输出,展示了过程中一些对redis的操作命令:

  最终生成者的task,作为消息发送到远程的消费者上执行,执行的结果又通过网络回传给生产者

  最终生成者的task,作为消息发送到远程的消费者上执行,执行的结果又通过网络回传给生产者

  上面示例展示了celery作为一个分布式任务调度系统的执行过程,本地的任务调用,通过AMQP协议的包装,作为消息发送到远程的消费者执行。

  从项目结构看,模块较多,功能复杂。不过我们已经搞定了vine, py-amqp和kombu三个库,接下来只需要理解worker,beat和multi三种服务模型,就可以较好的了解celery这个分布式系统如何构建。

  在这个服务启动过程中,创建了celery-application和worker-application两个应用程序。至于具体的启动流程,我们暂时跳过,先看看客户端的流程。

  可以看到celery类提供了一些默认模块类的名称,可以根据这些类名动态创建对象。app对象任务的处理使用一个队列作为pending状态的任务容器,使用TaskRegistry来管理任务的注册。

  celery-app的两大功能,管理task和管理AMQP连接,我们有一个大概的了解。

  worker模式启动在WorkController中,将服务分成不同的阶段,然后将各个阶段组装成一个叫做蓝图(Blueprint)的方式进行管理:

  比如一个消费者步骤, 依赖Connection步骤。启动的时候对Connection进行消费。两者代码如下:

  通过将启动过程拆分成多个step单元,然后组合单元构建成graph,逐一启动。

  本篇我们正式学习了一下celery的使用流程,了解celery如果使用redis作为broker,利用服务作为消费者,使用客户端作为生成者,完成一次远程任务的执行。简单探索worker服务模式的启动流程,重点分析celery-application的管理task和管理连接两大功能实现。

  通过type函数创了一个动态的task子类,然后执行 实例化一个task子对象。

  这是Celery源码阅读系列文章第五篇,回复关键字Celery看这个系列的文章