Celery 5.1 (Sun Harmonics) 的新增功能 — Python 文档
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,因为我们没有大声警告使用这些弃用的设置。
有关说明,请参阅 迁移指南 。
第 4 步:将代码迁移到 Python 3
Celery 5.x 仅支持 Python 3。 因此,您必须确保您的代码与 Python 3 兼容。
如果您尚未将代码移植到 Python 3,则必须在升级之前进行。
您可以使用 2to3 和 pyupgrade 等工具来帮助您完成这项工作。
迁移完成后,使用 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 应用进一步的安全补丁。
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