
Celery 版本变更历史深度解读从 5.6.2 回溯 5.2 的演进脉络与关键配置实践【免费下载链接】celeryDistributed Task Queue (development branch)项目地址: https://gitcode.com/gh_mirrors/ce/celery本篇技术指南以 CeleryDistributed Task Queue 开发分支官方变更日志 Changelog.rst 为核心骨架逐版梳理 5.6.x、5.5.x、5.4.x、5.3.x 与 5.2.x 系列的重大变更并结合仓库内 配置默认值定义 与 Worker 关闭流程实现 等源码证据解释每一个新配置项的真实含义与适用场景。读完本文你将掌握 Celery 近期版本在 Python 版本策略、RabbitMQ Quorum Queues、软关闭Soft Shutdown、Pydantic 集成、SQS 传输层选型、内存泄漏修复等方向上的演进脉络并能够对照版本升级清单排查自身部署中的兼容性风险。文档结构与阅读指引docs/changelog.rst本身仅是一个 Sphinx 包含指令.. include:: ../Changelog.rst真正承载内容的是仓库根目录的 Changelog.rst该文件共约 3000 行按版本倒序组织最上方是 main 分支与 5.6.x 系列的变更记录随后依次为 5.6.0 的 Release Candidate / Beta 版本、5.5.x、5.4.x、5.3.x 与 5.2.x 系列。每个版本条目包含锚点如.. _version-5.6.2:与版本标题发布信息字段:release-date:与:release-by:正式版本如 5.6.0、5.5.0、5.4.0额外包含 Key Highlights 关键亮点小节集中说明 Python 版本策略、安全修复、新传输层、新配置项等重大变化Whats Changed 小节列出该版本的完整合并列表是排查回归与追溯问题来源的一手索引。该文档正文同时建议读者参考whatsnew-5.6、whatsnew-5.5等发布说明文档对应仓库路径为 docs/history/whatsnew-5.6.rst 与 docs/history/whatsnew-5.5.rst。5.6.x稳定性、安全与内存治理5.6.2 与 5.6.1修复轮次5.6.22026-01-04 发布包含三个关键修复修复 DjangoWorkerFixup 中的递归WorkController实例化问题以及当pool_cls为字符串时抛出的AttributeError被撤销revoked的任务现在会立即将后端状态更新为REVOKED此前该状态更新存在延迟可能导致任务状态查询结果与真实执行情况不一致。5.6.12025-12-29 发布的修复重点集中在运维与集成层面修复 Redis Sentinel ACL 认证支持修复优雅关闭graceful shutdown期间 broker 心跳heartbeat未发送的问题关闭数据库连接池仅在 prefork 模式下进行避免在其它并发模式下误关连接仅对 Python 3.11 使用exceptiongroup回退库文档层面澄清了result_extended与周期任务元数据的关系并给出通过headers[periodic_task_name]获取周期任务名的示例。5.6.0Python 版本策略与关键亮点5.6.02025-11-30 发布是该系列最重要的正式版本其关键亮点如下Python 3.9 成为最低版本。Celery 5.6.0 移除了对 Python 3.8已 EOL的支持最低要求 Python 3.9同时该版本开始提供对 Python 3.14 的初步支持。CI 层面同步移除了 Python 3.8见 Changelog 中 Remove Python 3.8 from CI workflow 等条目。仍在 Python 3.8 上运行的用户必须先升级 Python 解释器再升级 Celery。SQS 传输层回退至 pycurl。5.5.0 通过 Kombu 引入的 urllib3 替换 pycurl 在 5.6.0 中被回退原因是该切换对 SQS 用户造成了关键影响部分环境下处理吞吐量从约 100 任务/秒骤降至约 3 任务/秒出现UnknownOperationException错误导致容器崩溃循环出现无错误日志的静默消息处理失败。因此 SQS 传输层用户必须确保安装了pycurl。如果升级到 5.5.0 后移除了pycurl需要重新安装。安全修复Broker 凭证泄漏防护。修复了 delayed delivery 机制在日志中以明文记录含密码 broker URL 的安全问题现在所有日志输出中的 broker 凭证都会被正确脱敏sanitized。两处内存泄漏修复异常处理内存泄漏#9799该问题在 Python 3.11 上尤为严重原因是增强的 traceback 数据导致引用环无法被垃圾回收修复通过正确打破 traceback 中的引用环来允许 GC 回收。待处理结果pending result内存泄漏#9806AsyncResult订阅在结果被forget()后未被清理的问题。这两项修复与仓库测试目录中t/integration/test_mem_leak_in_exception_handling.py、t/integration/test_events_state_memory_leak.py等集成测试所覆盖的治理方向一致。ETA 任务内存上限新配置项。新增配置worker_eta_task_limit用于防止 worker 从 broker 获取大量 ETA/countdown 任务时耗尽内存。此前当 broker 中积压大量定时任务时worker 可能把可用内存耗尽。该配置在 celery/app/defaults.py 中定义为Option(None, typeint)默认值为None即不限制并在 celery/worker/consumer/tasks.py 中由 consumer 读取使用。示例app.conf.worker_eta_task_limit 1000自动创建队列的类型选择新配置项。新增两个配置项允许在 Celery 自动创建缺失队列时指定队列类型与交换机类型对希望配合 RabbitMQ quorum 队列使用自动创建队列的用户尤其有用task_create_missing_queue_type自动创建队列的队列类型如quorum、classic默认值为classic见 defaults.pytask_create_missing_queue_exchange_type自动创建队列的交换机类型默认值为None见 defaults.py。这两个配置在 celery/app/amqp.py 中通过conf.task_create_missing_queue_type被读取并用于队列声明。示例app.conf.task_create_missing_queue_type quorum5.6.0 预发布版本中的其它重要变化5.6.0 的 RC/Beta 系列2025-09 至 2025-11还沉淀了多项值得关注的变化Django Connection Pool 支持#9953Django 数据库连接池支持。Redis 后端新增credential_provider支持#9879以及Redis client name 支持#9900。Kombu 升至 5.6.0并移除了5.7的上限约束#9981。MSSQL 结果后端算术溢出修复#9904。修复 chord 头部失败时嵌套 chord 的超时问题#8786/#9788。apply()方法补充root_id与parent_id#9784。禁用 prefetch 功能disable-prefetch被限制为仅适用于 Redis broker#9919修正了此前该特性可能被错误启用于其它 broker 的问题。5.5.xQuorum Queues、软关闭与 Pydantic 三大新能力5.5.0正式版关键亮点5.5.02025-03-31 发布是 5.6 之前功能密度最高的版本正式引入三大能力Redis Broker 稳定性改进。长期存在的 Redis broker 断连问题在 Kombu 5.5.0 中得到定位与解决本版本随附该 Kombu 版本。此外 Redis 结果后端新增exception_safe_to_retry特性在 Redis 临时连接异常期间提升重试弹性。RabbitMQ Quorum Queues 支持。正式支持 RabbitMQ 的 Quorum Queues 特性包括与 ETA 任务的兼容。当检测到 quorum 队列时自动启用 Native Delayed Delivery 来实现 ETA 机制。相关配置项及其默认值见 defaults.py 与 defaults.pybroker_native_delayed_delivery_queue_typedelayed delivery 使用的队列类型默认quorumtask_default_queue_type任务默认队列类型默认classicworker_detect_quorum_queues是否自动检测 quorum 队列默认True。配套示例与部署脚本可参考仓库 examples/quorum-queues 目录含declare_queue.py、myapp.py、setup_cluster.sh、test_cluster.sh完整文档见 docs/getting-started/backends-and-brokers/rabbitmq.rst。软关闭机制Soft Shutdown。软关闭是一种有时间上限的温关闭warm shutdown在冷关闭cold shutdown之前启动worker 会为当前正在执行的任务预留worker_soft_shutdown_timeout秒的完成时间若超时仍未完成则启动冷关闭并取消所有正在执行的任务。该机制对带可见性超时visibility timeout机制的 broker如 Redis、SQS尤其有价值——它给 worker 足够时间在退出前重新入队未完成任务防止任务丢失。配置项与默认值见 defaults.pyworker_soft_shutdown_timeout软关闭持续秒数默认0.0禁用worker_enable_soft_shutdown_on_idleworker 空闲时是否仍启用软关闭默认False。软关闭的真实执行逻辑位于 celery/worker/worker.py 的wait_for_soft_shutdown()方法它先快照当前活跃请求state.active_requests若配置了worker_enable_soft_shutdown_on_idle则视为存在请求当超时配置大于 0 且存在请求时记录警告日志并sleep相应秒数。值得注意的是若 worker 没有任何任务在执行即使配置了超时也不会等待——这一点在源码 docstring 中有明确警告。Pydantic 集成。任务原生支持 Pydantic 模型可在任务中直接利用 Pydantic 的数据校验与序列化能力from pydantic import BaseModel from celery import Celery app Celery(tasks) class ArgModel(BaseModel): value: int class ReturnModel(BaseModel): value: str app.task(pydanticTrue) def x(arg: ArgModel) - ReturnModel: # args/kwargs 类型标注为 Pydantic 模型时会被自动转换 assert isinstance(arg, ArgModel) # 返回值模型会自动转换为 dict return ReturnModel(valuefexample: {arg.value})相关任务配置项pydanticTrue启用集成pydantic_strictTrue/False控制是否启用严格校验默认Falsepydantic_context{...}提供校验上下文pydantic_dump_kwargs{...}定制序列化行为。仓库 examples/pydantic 目录包含完整示例tasks.pyrequirements/extras/pydantic.txt声明了对应依赖。Google Pub/Sub 传输层。新增 Google Cloud Pub/Sub 作为消息传输层安装与配置方式$ pip install celery[gcpubsub]broker_url gcpubsub://projects/project-idREMAP_SIGTERM 正式支持。此前未文档化的 REMAP_SIGTERM 特性经测试与文档化后正式支持允许将 SIGTERM 信号重映射为 SIGQUIT从而用 TERM 而非 QUIT 触发软/冷关闭。这在容器化环境中特别有用因为 SIGTERM 是优雅终止的标准信号。启用方式export REMAP_SIGTERMSIGQUIT数据库后端表创建时机控制。新增create_tables_at_setup选项见 defaults.py默认True控制数据库后端建表时机默认在 backend 初始化时创建表设为False则延迟到真正需要时创建便于更精细地管理数据库 schema。app.conf.result_backend dbsqlite:///results.db app.conf.database_create_tables_at_setup FalsePython 3.13 支持。官方支持 Python 3.13Kombu 与 py-amqp 等核心依赖同步更新。该版本同时兼容 Python 3.8 ~ 3.13 及 PyPy 3.10注意Python 3.8 兼容性在 5.6.0 中被移除。5.5.0 预发布版本的重要演进从 5.5.0b12024-07-24到 5.5.0rc52025-02-25可以清晰看到三大能力的落地过程b1引入 Quorum Queues 初步支持task_default_queue_type、worker_detect_quorum_queues与 Redis broker 稳定性改进基于 Kombu 5.4.0 RC。b2加入 Pydantic 支持。b3/b4加入软关闭机制worker_soft_shutdown_timeout、worker_enable_soft_shutdown_on_idle、REMAP_SIGTERM 与 Python 3.13 初步支持。rc2 起Quorum Queues 支持完善为完整 ETA 机制新增broker_native_delayed_delivery_queue_type配置Kombu 最低版本升至 5.5.0。rc5合并 Native Delayed Delivery 重构#9599、quorum 队列检测支持多 broker 实例#9294。此外 5.5.x 期间还修复了SIGQUIT在task_acks_lateFalse时不触发冷关闭的问题#9461、worker_max_memory_per_child单位换算kilobyte 按 1024 字节计见 celery/worker/worker.py 相关配置解析、crontab支持月份名称#9068等。5.5.1 ~ 5.5.3 属于维护轮次其中 5.5.3 支持了apply_async在 quorum 队列上不带 queue 参数的调用#9686。5.4.xQA 体系强化与 GCS 后端5.4.02024-04-17 发布的主题是质量保障QA体系强化Smoke Tests 进入标准 CI新增自动化冒烟测试层面向生产场景与复杂条件。仓库中对应目录为 t/smoke包含tests/如test_consumer.py、test_worker.py、test_control.py与workers/dev、alt、latest 等 worker 变体。pytest-celery v1.0.0 与独立 Bug 复现脚本新的 pytest-celery 插件允许把完整的 Celery Docker 化环境封装进单个 pytest 脚本从而确定性复现 bug。新增 Google Cloud Storage (GCS) 结果后端#8868对应实现位于 celery/backends/gcs.py并在 5.5.x 中补充了原生incr支持#9302。修复 Redis broker 重启后 worker 不消费任务的问题#8796并为此后 Kombu 侧的根治性修复奠定基础。新增 Task 的 Django 专用子类#8491、支持从 app 配置读取 daemonization 选项#8553、chord在 dynamicdb 后端的高效实现#8783。5.4.0rc1 引入新配置worker_enable_prefetch_count_reduction#8581与 prefetch 相关治理方向一致。5.3.xStamping 机制成熟与安全修复5.3.x 系列2022-06 至 2023-11跨越一年多其中 5.3.0 引入了大量与Stamping任务戳记机制相关的功能与修复Canvas Header Stamping#7384与revoke_by_stamped_headers远程控制命令#7838支持基于 stamped headers 撤销任务Task.on_replace()钩子#7860、StampingVisitor访问 callbacks/errbacks#7867大量 stamping 边界修复retry 丢失 stamps#8120、嵌套 group stamping#7935、chord body stamping#7722等仓库 examples/stamping 目录含examples.py、visitors.py、revoke_example.py与 t/smoke/tests/stamping 提供了完整的机制示例与集成测试。5.3.x 其它值得关注的点安全修复 CVE-2021-237275.2.2 引入5.3 延续当任务失败信息被序列化到后端、且异常类只能从消费者代码库导入时Celery 会重建异常类以在查询结果的进程上重新抛出。若重建的异常类型并非异常则存在 RCE 注入风险该补丁增加了类型条件校验。Changelog 中给出了完整的攻击载荷示例通过exc_module: os、exc_type: system注入os.system调用。5.3.2 与 5.3.3 被撤回Yanked因 store children with database backend#8338与 Fix eager tasks does not populate name field#8383两个破坏性 API 变更而被撤回5.3.4 将其全部回退这是升级时务必注意的历史教训。5.3.4/5.3.6修复broker_connection_retry_on_startup与broker_connection_retry标志不可靠的问题#8446更新 Kombu5.3.4 以修复 SQS 与 boto JSON 序列化器的兼容性#8646Python 3.12 初步支持#8549。新增配置beat_cron_starting_deadline_seconds#7945、broker_channel_error_retry#7951、result_backend_thread_safe#8058、task_allow_error_cb_on_chord_header#7712、worker_deduplicate_successful_tasks#8209。弃用与迁移弃用pytz转向zoneinfo#8159、parse_iso8601弃用改用fromisoformat#8098、从pkg_resources迁移到importlib#7218该 PR 曾导致 5.2.5 被撤回。5.2.x安全、兼容性与收尾维护5.2.x 系列2021-08 至 2022-05相对克制但包含必须知晓的安全相关内容5.2.2 修复 CVE-2021-23727存储型命令注入详见上文 5.3.x 节Changelog 完整记录了漏洞原理、利用条件与修复方式建议所有运行 5.2.2 之前版本的用户升级。5.2.5 被撤回因 Use importlib instead of deprecated pkg_resources#7218引入回归。5.2.0 起Python 3.6 支持被移除b3Python 3.10 支持加入b1Kombu 最低版本逐步提升至 5.2.x新增before_start钩子#6923chord_unlock任务路由到与 chord body 相同的队列#6896。升级路径与实操建议综合 5.2 ~ 5.6 各版本的变更升级时可按下述清单自查Python 版本若在 Python 3.8 上运行必须先升级到 3.9 才能安装 Celery 5.6.05.6.0 起还提供 Python 3.14 初步支持。SQS 用户5.6.0 起必须确保pycurl已安装若此前随 5.5.0 移除了 pycurl请重新安装否则将遭遇吞吐量骤降或静默失败。RabbitMQ 用户使用 quorum 队列时确认task_default_queue_type、worker_detect_quorum_queues与broker_native_delayed_delivery_queue_type三个配置的取值自动创建队列时可通过task_create_missing_queue_type指定队列类型。关闭流程在 Redis/SQS 这类带可见性超时的 broker 上建议配置worker_soft_shutdown_timeout秒以降低优雅关闭时的任务丢失风险容器化环境可配合REMAP_SIGTERMSIGQUIT用 TERM 触发软/冷关闭。内存治理ETA/countdown 任务量大时设置worker_eta_task_limit若运行在 Python 3.11 且观察到异常处理相关内存增长5.6.0 的 traceback 引用环修复#9799值得重点关注。版本撤回警示5.3.2、5.3.3 与 5.2.5 均因破坏性变更被撤回若历史部署中使用了这三个版本应尽快调整。所有配置项的完整默认值均可直接在 celery/app/defaults.py 中核验Worker 关闭与 ETA 消费等运行时行为可在 celery/worker/worker.py 与 celery/worker/consumer/tasks.py 中追踪实现。结合 Changelog 与源码阅读是理解 Celery 每个版本改动背后动机的最可靠路径。【免费下载链接】celeryDistributed Task Queue (development branch)项目地址: https://gitcode.com/gh_mirrors/ce/celery创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考