celery worker初始化--DAG实现

本文探讨了在Python3.5.2和Celery 4.3.0环境下,Celery Worker的初始化过程,特别是其采用的DAG(有向无环图)设计。通过分析模块如Worker、Timer、Hub等之间的依赖关系,展示了Celery如何使用BluePrint类和DependencyGraph进行依赖排序。文中提到了Tarjan算法和拓扑排序在实现模块执行顺序中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文环境python3.5.2,celery 4.3.0系列
celery的启动过程中涉及多个模块,各个模块之间又存在着依赖关系,那么如何按照依赖关系启动各个模块,celery设计了一套简单的DAG(有向无环图),本文就主要分析一下celery DAG的实现过程。

celery 中各个模块定为step
  • Worker
    • Timer:用于执行定时任务的 Timer,和 Consumer 那里的 timer 不同
    • Hub:Eventloop 的封装对象(回顾一下 Kombu 的)
    • Pool:构造各种执行池(线程/进程/协程)的
    • Autoscaler:用于自动增长或者 pool 中工作单元
    • StateDB:持久化 worker 重启区间的数据(只是重启)
    • Autoreloader:用于自动加载修改过的代码
    • Beat:创建 Beat 进程,不过是以子进程的形式运行(不同于命令行中以 beat 参数运行)

worker初始化过程中,各个模块的执行顺序是由一个BluePrint类定义,并且根据各个模块之间的依赖进行排序执行。

    class Blueprint(bootsteps.Blueprint):
        """Worker bootstep blueprint."""

        name = 'Worker'
        default_steps = {
            'celery.worker.components:Hub',
            'celery.worker.components:Pool',
            'celery.worker.components:Beat',
            'celery.worker.components:Timer',
            'celery.worker.components:StateDB',
            'celery.worker.components:Consumer',
            'celery.worker.autoscale:WorkerComponent',
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值