Celery 5.1 (Sun Harmonics) 的新增功能 — Python 文档

来自菜鸟教程
Celery/docs/latest/history/whatsnew-5.1
跳转至:导航、​搜索

Celery 5.1 (Sun Harmonics) 的新增功能

作者
Josue Balandrano Coronel (jbc at rmcomplexity.com)

更改历史记录

What's new 文档描述了主要版本的变化,我们还有一个 Change history 列出了错误修复版本 (0.0.x) 的变化,而旧的系列存档在 History 部分.

Celery 是一个简单、灵活、可靠的分布式编程框架,用于处理海量消息,同时为操作提供使用 Python 维护分布式系统所需的工具。

它是一个专注于实时处理的任务队列,同时也支持任务调度。

Celery 拥有庞大而多样化的用户和贡献者社区,您应该在 IRC 我们的邮件列表 上加入我们 。

要阅读有关 Celery 的更多信息,您应该阅读 介绍

虽然此版本 主要 向后兼容以前的版本,但阅读以下部分很重要,因为此版本是新的主要版本。

该版本在 CPython 3.6、3.7 & 3.8 & 3.9 上得到官方支持,在 PyPy3 上也得到支持。

目录

在升级到此版本之前,请务必阅读重要说明。


前言

5.1.0 版本是 Celery 的一个新的次要版本。

从现在开始,随着我们快速行动并打破常规,为您带来更好的体验,用户应该期待更频繁的主要版本发布。

5.x 系列中的发行版以 乔恩·霍普金斯 的歌曲代号命名。 此版本的代号为 Sun Harmonics

从现在开始,我们只支持 Python 3.6 及更高版本。 我们将保持与 Python 3.6 的兼容性,直到它于 2021 年 12 月停产。

— 奥默·卡茨

长期支持政策

由于我们希望为您提供一些过渡时间,因此我们将 Celery 4.x 指定为 LTS 版本。 Celery 4.x 的支持将持续到 2021 年 8 月 1 日。

我们将接受并应用针对错误修复和安全问题的补丁。 但是,不会为该版本合并任何新功能。

Celery 5.x 不是 LTS 版本。 我们将支持它直到 Celery 6.x 发布。

我们正在定义我们的长期支持政策。 观看下一个“新增功能”文档以获取更新。


贡献者墙

0xflotus < 0xflotus@gmail.com > AbdealiJK < abdealikothari@gmail.com > 安纳托利 < apeks37@yandex.ru > 安娜·博尔岑科 < aaa-nn-a@mail.ru > 阿鲁塞尼 < aruseni.magiku@gmail.com > 阿西夫赛义夫乌丁 (Auvi) < auvipy@gmail.com > 阿西夫赛义夫乌丁 < auvipy@gmail.com > Awais Qureshi < awais.qureshi@arbisoft.com > careljonkhout < carel.jonkhout@gmail.com > 基督教克劳斯 < cclauss@me.com > 丹特古德曼1 < xxdanthegoodmanxx@gmail.com > 戴夫约翰森 < davejohansen@gmail.com > 大卫施耐德 < schneidav81@gmail.com > 法米 < fahmimodelo@gmail.com > Felix Yan < felixonmars@archlinux.org > 加布里埃尔·奥让德 < 加布里埃尔@augendre.info > 加尔科恩 < gal.cohen@autodesk.com > 加尔·科恩 < gal.nevis@gmail.com > 林根植 < leemgs@gmail.com > Guillaume DE SUSANNE D'EPINAY < guillaume.desusanne@ssi.gouv.fr > 希尔玛希尔马森 < hilmarh@gmail.com > 伊利亚·沃洛奇 < illia.volochii@gmail.com > 詹浩洋 < randy19962@gmail.com > 乔纳森·斯托帕尼 < 乔纳森@stoppani.name > Josue Balandrano Coronel < jbc@rmcomplexity.com > kosarchuksn < sergeykosarchuk@gmail.com > 科斯佳·迪夫 < kostya.deev@bluware.com > 马特霍夫曼 < mjhoffman65@gmail.com > 马图斯瓦洛 < matusvalo@gmail.com > 徐明锡 < clichedmoog@gmail.com > 诺姆 < noamkush@gmail.com > 奥马尔·卡茨 < omer.drow@gmail.com > 帕夫洛斯·卡利斯 < pakallis@gmail.com > Pavol Plaskoň < pavol.plaskon@gmail.com > 宋鹏捷< spengjie@sina.com > 萨尔多贝克·伊莫马利耶夫 < sardorbek.imomaliev@gmail.com > 谢尔盖·利亚普斯汀 < s.lyapustin@gmail.com > 谢尔盖·季霍诺夫 < zimbler@gmail.com > 斯蒂芬 J。 富里< 史蒂夫@tpastream.com > Swen Kooij < swen@sectorlabs.ro > tned73 < edwin@tranzer.com > 托马斯 Hrnciar < thrnciar@redhat.com > tum1er < zimbler@gmail.com >

笔记

这堵墙是根据 git 历史自动生成的,因此遗憾的是,它不包括帮助解决更重要的事情(例如回答邮件列表问题)的人。


从 Celery 4.x 升级

第 1 步:调整您的命令行调用

Celery 5.0 引入了一个新的 CLI 实现,它不完全向后兼容。

全局选项不能再位于子命令之后。 相反,它们必须被定位为 celery 命令的一个选项,如下所示:

celery --app path.to.app worker

如果您使用我们的 Daemonization 指南在生产中部署 Celery,您应该重新访问它以获取更新。


第 2 步:使用新的设置名称更新您的配置

如果您在迁移到 Celery 4.0 时尚未更新配置,请立即更新。

我们选择将弃用期延长至 6.0,因为我们没有大声警告使用这些弃用的设置。

有关说明,请参阅 迁移指南


第 3 步:阅读本文档中的重要说明

确保您不受 以下部分 中提到的任何重要升级说明的影响。

您应该确认 CLI 中的所有重大更改都不会影响您。 详情请参考新命令行界面


第 4 步:将代码迁移到 Python 3

Celery 5.x 仅支持 Python 3。 因此,您必须确保您的代码与 Python 3 兼容。

如果您尚未将代码移植到 Python 3,则必须在升级之前进行。

您可以使用 2to3pyupgrade 等工具来帮助您完成这项工作。

迁移完成后,使用 Celery 4 运行您的测试套件以确保没有任何损坏。


第 5 步:升级到 Celery 5.1

此时,您可以使用新版本升级您的工作人员和客户端。


重要笔记

支持的 Python 版本

支持的 Python 版本是:

  • CPython 3.6
  • CPython 3.7
  • CPython 3.8
  • CPython 3.9
  • PyPy3.6 7.2 (pypy3)


重要笔记

昆布

从 v5.1 开始,所需的最低版本是 Kombu 5.1.0。


台球

从 v5.1 开始,最低要求的版本是台球 3.6.4。


来自 5.0 的重要说明

不再支持 Python 2.7 和 3.5

Celery 现在需要 Python 3.6 及更高版本。

Python 2.7 已于 2020 年 1 月停产。 为了集中精力,我们在此版本中放弃了对 Python 2.7 的支持。

此外,Python 3.5 已于 2020 年 9 月到达 EOL。 因此,我们也将放弃对 Python 3.5 的支持。

如果您仍然需要使用 Python 2.7 或 Python 3.5 运行 Celery,您仍然可以使用 Celery 4.x。 但是,我们鼓励您升级到受支持的 Python 版本,因为不会为 Python 2.7 或 Python 3.5 应用进一步的安全补丁。


Eventlet 工作池

由于 eventlet/eventlet#526,所需的最低版本是 eventlet 0.26.1。


Gevent 工人池

从 v5.0 开始,最低要求的版本是 gevent 1.0.0。


Couchbase 结果后端

Couchbase 结果后端现在使用 V3 Couchbase SDK。

因此,我们不再支持 Couchbase Server 5.x。

此外,从 v5.0 开始,数据库客户端所需的最低版本为 couchbase 3.0.0。

要验证您的 Couchbase 服务器是否与 V3 SDK 兼容,请参阅他们的 文档


Riak 结果后端

由于不再维护数据库,Riak 结果后端已被删除。

Python 客户端仅支持 Python 3.6 及以下版本,这使我们无法支持它,而且它也没有维护。

如果您仍在使用 Riak,请不要在将应用程序迁移到其他数据库时升级到 Celery 5.0。

对于没有提前通知,我们深表歉意,但我们认为您受到此重大更改影响的可能性很小,这就是我们这样做的原因。


AMQP 结果后端

AMQP 结果后端已被删除,因为它在 4.0 版中已被弃用。


删除了不推荐使用的模块

celery.utils.encoding 和 celery.task 模块在 4.0 版本中已被弃用,因此在 5.0 中被删除。

如果你之前使用过 celery.utils.encoding 模块,你应该导入 kombu.utils.encoding 。

如果你之前使用过 celery.task 模块,你应该直接从 celery 模块导入。

如果你使用 from celery.task import Task 你应该使用 from celery import Task 代替。

如果你使用 celery.task 装饰器,你应该使用 celery.shared_task 代替。


azure-servicebus 现在需要 7.0.0

鉴于 SDK 在 0.50.0 和 7.0.0 之间的变化,Kombu 弃用了对旧 azure-servicebus 版本的支持。


消息

支持 Azure 服务总线 7.0.0

使用 Kombu v5.1.0,我们现在支持 Azure 服务总线。

Azure 在 0.50.0 和 7.0.0 之间彻底改变了 Azure ServiceBus SDK。 azure-servicebus >= 7.0.0 现在需要 Kombu 5.1.0


添加对 SQLAlchemy 1.4 的支持

遵循 SQLAlchemy 1.4 中的更改,声明性基础不再是扩展。 从 sqlalchemy.ext.declarative 导入它已被弃用,并将在 SQLAlchemy 2.0 中删除。


支持Redis用户名认证

以前,URI 中会忽略用户名。 从 Redis>=6.0 开始,情况不应该是这样,因为 ACL 支持已经落地。

详情请参考文档


SQS 传输 - 支持退避策略

SQS 现在支持托管可见性超时。 这让我们可以实施退避策略(例如,指数策略),这意味着任务失败之间的时间将根据重试次数动态变化。

文档:reference/kombu.transport.SQS.rst


复制成功的任务

每次收到任务时,trace 函数都会从后端获取元数据并比较其状态。 如果状态为 SUCCESS,我们会记录并保释,而不是执行任务。 任务被确认,一切正常进行。

文档::设置:`worker_deduplicate_successful_tasks`


在连接丢失时使用延迟确认终止任务

延迟确认的任务在重新启动后继续运行,尽管连接丢失且无法再确认。 这些任务现在将终止。

文档::设置:`worker_cancel_long_running_tasks_on_connection_loss`


task.apply_async(ignore_result=True) 现在避免保留结果

task.apply_async 现在支持传递 ignore_result,其作用与使用 @app.task(ignore_result=True) 相同。


使用 cached_property 的线程安全实现

cached_property 在 celery 中大量使用,但由于它不是线程安全的,因此在多线程代码中会导致问题。 Celery 现在使用 cached_property 的线程安全实现。


任务现在可以按任何顺序需要 kwargs

现在可以像这样定义任务:

from celery import shared_task

@shared_task
def my_func(*, name='default', age, city='Kyiv'):
    pass

SQS - 支持使用 AWS 进行 STS 身份验证

STS 令牌需要在一段时间后刷新。 达到 sts_token_timeout 后,将创建一个新令牌。

文档:入门/后端和经纪人/sqs.rst


支持Redis health_check_interval

health_check_interval 可以配置,会传递给 redis-py。

文档::设置:`redis_backend_health_check_interval`


将默认 pickle 协议版本更新为 4

pickle 协议版本已更新,以允许 Celery 序列化更大的字符串以及其他好处。

参见:https://docs.python.org/3.9/library/pickle.html#data-stream-format


使用 SSL 支持 Redis Sentinel

有关更多信息,请参阅文档:getting-started/backends-and-brokers/redis.rst