更改历史记录 — Python 文档
更改历史记录
本文档包含 4.3.x 系列中错误修复版本的更改说明,请参阅 Celery 4.3 中的新功能(大黄) 以了解 Celery 4.3 中的新功能。
4.3.1
- 发布日期
- 2020-09-10 1:00 PM UTC+3:00
- 发布者
- 奥默·卡茨
限制 vine 版本低于 5.0.0。
贡献者 Omer Katz
4.3.0
- 发布日期
- 2019-03-31 7:00 PM UTC+3:00
- 发布者
- 奥默·卡茨
添加了对使用正则表达式模式或全局模式向多个 Pidbox 进行广播的支持。
这允许您一次检查或 ping 多个工作人员。
贡献者德米特里·马林诺夫斯基 & 杰森海德
添加了对 PEP 420 命名空间包的支持。
这允许您从命名空间包加载任务。
贡献者 科林·沃森
添加了 :setting:`acks_on_failure_or_timeout` 作为设置而不是仅任务选项。
这在原始 PR 中是缺失的,但现在为了完整性而添加。
贡献者 Omer Katz
添加了 :signal:`task_received` 信号。
贡献者 Omer Katz
修复了使用 Python < 3.6 的每个人都发生的 CLI 崩溃。
该崩溃是通过使用 Python 3.6 中引入的
ModuleNotFoundError
异常在 acd6025 中引入的。贡献者 Omer Katz
修复了在 :setting:`result_expires` 设置为 None 时使用 Redis 结果后端时发生的崩溃。
贡献者托尼·鲁扎 & 奥默·卡茨
为 MongoDB 结果后端添加了 DNS 种子列表连接格式 的支持。
这需要 dnspython 包,该包将在为 MongoDB 结果后端安装依赖项时默认安装。
贡献者 George Psarakis
将最小 eventlet 版本提高到 0.24.1。
贡献者 George Psarakis
将 msgpack-python 包替换为 msgpack。
我们不再使用已弃用的软件包。 有关如何升级的更多详细信息,请参阅此版本的 重要说明 。
贡献者 丹尼尔·哈勒
允许调度当前工作人员中未注册的任务的错误处理程序。
这些类型的错误处理程序现在是可能的:
from celery import Signature Signature( 'bar', args=['foo'], link_error=Signature('msg.err', queue='msg') ).apply_async()
对 Redis 代理和结果后端的 SSL 支持的其他修复和增强。
供稿人 杰里米·科恩
代码清理、测试覆盖率和 CI 改进:
- 奥默·卡茨
- 弗洛里安·夏尔丹
文档修复:
- 奥默·卡茨
- Samuel Huang
- 阿米尔·侯赛因·赛义德·梅尔
- 德米特罗·利特维诺夫
4.3.0 RC2
- 发布日期
- 2019-03-03 晚上 9:30 UTC+2:00
- 发布者
- 奥默·卡茨
文件系统后端:为文件系统后端添加了有意义的错误消息。
贡献者 Lars Rinn
新结果后端:添加了ArangoDB后端。
贡献者 Dilip Vamsi Moturi
Django:在当前工作目录之前而不是附加,以便项目目录按预期优先于系统模块。
贡献者 Antonin Delpeuch
将最低 py-redis 版本提高到 3.2.0。
由于 py-redis 早期版本中的多个错误导致 Celery 出现问题,我们被迫将所需的最低版本提高到 3.2.0。
贡献者 Omer Katz
依赖项:将 Kombu 的最低要求版本提高到 4.4
贡献者 Omer Katz
4.3.0 RC1
- 发布日期
- 2019-02-20 下午 5:00 IST
- 发布者
- 奥默·卡茨
Canvas:
celery.chain.apply()
在应用链时不再忽略关键字参数。供稿人 Korijn van Golen
结果集:不要尝试在
celery.result.ResultSet
中缓存结果。在加入期间,结果缓存使用
celery.result.ResultSet.get()
填充,如果其中一个结果包含异常,则加入意外失败。结果缓存现已删除。
供稿人 德里克·哈兰德
Application:当 related_name 关键字参数为 None 时,
celery.Celery.autodiscover_tasks()
现在尝试导入包本身。贡献者 Alex Ioannidis
Windows 支持 :在 Windows 10 上,陈旧的 PID 文件阻止 celery beat 运行。 我们现在在
SystemExit
升起时移除它们。贡献者 :github_user:`na387`
Task:添加了新的 :setting:`task_acks_on_failure_or_timeout` 设置。
在失败或超时时确认 SQS 消息使得无法使用死信队列。
我们引入了新选项 acks_on_failure_or_timeout,以确保我们可以完全回退到原生 SQS 消息生命周期,使用重新传递进行重试(在处理缓慢或失败的情况下)并在定义的次数后转换到死信队列。
贡献者 Mario Kostelac
RabbitMQ Broker:调整 HA 标头以在 RabbitMQ 3.x 上工作。
这一变化也意味着我们将终止对 RabbitMQ 2.x 的官方支持。
供稿人 Asif Saif Uddin
命令行:改进芹菜更新错误处理。
供稿人 Federico Bond
Canvas:支持 [X37X]:setting:`task_always_eager` 设置为 True 的和弦。
贡献者 Axel Haustant
Result Backend:可选择将任务属性存储在结果后端。
将 :setting:`result_extended` 配置选项设置为 True 可以在结果后端存储额外的任务属性。
贡献者 约翰·阿诺德
Couchbase Result Backend:允许Couchbase 结果后端自动检测序列化格式。
供稿人 道格拉斯罗德
新结果后端:添加了Azure Block Blob Storage结果后端。
后端在 azure-storage 库之上实现,该库使用 Azure Blob 存储作为可扩展的低成本 PaaS 后端。
后端通过一个简单的 nginx/gunicorn/sanic 应用程序进行负载测试,该应用程序托管在 DS4 虚拟机(4 个 vCore,16 GB RAM)上,能够以 ~170 RPS 处理 600 多个并发用户。
提交还包含实时端到端测试,以促进后端功能的验证。 通过将 AZUREBLOCKBLOB_URL 环境变量设置为 azureblockblob://{ConnectionString} 来激活测试,其中 ConnectionString 的值可以在 Access 中找到Azure 门户中存储帐户资源的密钥 窗格。
贡献者 克莱门斯·沃尔夫
Task:
celery.app.task.update_state()
现在接受关键字参数。这允许将额外的字段传递给结果后端。 这些字段默认不使用,但自定义结果后端可以使用它们来确定如何存储结果。
贡献者 克里斯托弗·迪格南
优雅地处理消费者
kombu.exceptions.DecodeError
。当使用 v2 协议时,当消费者在解码消息时遇到错误时,worker 不再崩溃。
供稿人 Steven Sklar
部署:修复init.d服务停止。
由 马库斯·麦克海尔 提供
姜戈 :放弃对 Django < 1.11 的支持。
供稿人 Asif Saif Uddin
Django:删除旧的 djcelery 加载器。
供稿人 Asif Saif Uddin
Result Backend:
celery.worker.request.Request
现在将celery.app.task.Context
传递给后端的 store_result 函数。由于该类当前将 self 传递给这些函数,因此在使用 django-celery-results 时撤销任务会导致任务结果数据损坏。
供稿人 山口清弘
Worker:心跳连接挂掉时重试。
以前,我们一直在尝试写入断开的连接。 这会导致内存泄漏,因为事件调度程序会不断将消息附加到出站缓冲区。
贡献者 Raf Geens
Celery Beat:调度时处理微秒。
贡献者 K Davis
Asynpool:修复关闭套接字时的死锁。
在尝试关闭套接字时,
celery.concurrency.asynpool.AsynPool
仅从集线器中移除了队列写入器,但并未移除读取器。 这导致文件描述符出现死锁,最终工作人员停止接受新任务。我们现在在单个循环迭代中关闭读取器和写入器文件描述符,以防止死锁。
供稿人 约书亚·恩格尔曼
Celery Beat:计算时间戳时正确考虑时区。
贡献者 :github_user:`yywing`
Celery Beat:
celery.beat.Scheduler.schedules_equal()
现在可以处理任一参数是 None 值。贡献者 :github_user:`ratson`
Documentation/Sphinx:修复了 Sphinx 对 shared_task 装饰函数的支持。
贡献者 乔恩·巴纳法托
新的结果后端:添加了CosmosDB的结果后端。
此更改添加了一个新的结果后端。 后端是在 pydocumentdb 库之上实现的,该库使用 Azure CosmosDB 作为可扩展、全局复制、高性能、低延迟和高吞吐量的 PaaS 后端。
贡献者 克莱门斯·沃尔夫
Application:添加了配置选项以允许单独的多个应用程序在单个 RabbitMQ 虚拟主机上运行。
新添加的 :setting:`event_exchange` 和 :setting:`control_exchange` 配置选项允许用户使用单独的 Pidbox 交换和单独的事件交换。
这允许不同的 Celery 应用程序在同一个虚拟主机上单独运行。
贡献者 Artem Vasilyev
Result Backend:忘记结果时忘记父结果元数据。
贡献者 :github_user:`tothegump`
Task 将任务参数存储在
celery.exceptions.MaxRetriesExceededError
中。供稿人 安东尼·鲁希尔
Result Backend:添加了 :setting:`result_accept_content` 设置。
此功能允许为结果后端配置不同的接受内容。
一个特殊的序列化程序 (auth) 用于签名消息,但是 result_serializer 保留在 json 中,因为我们不想在我们的结果后端中加密内容。
为了接受来自结果后端的未签名内容,我们引入了这个新的配置选项来指定来自后端的接受内容。
贡献者 本杰明佩雷托
Canvas:修复了基于类的任务的错误回调处理。
供稿人 Victor Mireyev
新结果后端:添加了S3结果后端。
供稿人 Florian Chardin
Task:增加了对 Cythonized Celery 任务的支持。
供稿人 Andrey Skabelin
Riak Result Backend:警告 Riak 后端用户可能的 Python 3.7 不兼容。
贡献者 George Psarakis
Python 运行时:添加了 Python 3.7 支持。
贡献者奥默·卡茨 & 阿西夫·赛义夫·乌丁
Auth Serializer:改进了 auth 序列化器。
auth 序列化程序进行了全面检修。 它以前被严重破坏。
对于这个序列化程序,我们现在依赖于密码学而不是 pyOpenSSL。
贡献者 本杰明佩雷托
命令行:芹菜报告现在报告内核版本以及其他平台详细信息。
贡献者 Omer Katz
Canvas:固定和弦带有链,包括一个组中的子和弦。
Celery 现在可以正确执行这些类型的画布中的最后一个任务:
c = chord( group([ chain( dummy.si(), chord( group([dummy.si(), dummy.si()]), dummy.si(), ), ), chain( dummy.si(), chord( group([dummy.si(), dummy.si()]), dummy.si(), ), ), ]), dummy.si() ) c.delay().get()
贡献者 Maximilien Cuony
Canvas:带有错误回调的复杂画布不再引发
AttributeError
。非常复杂的画布,例如 this 不再引发阻止构建它们的
AttributeError
。我们还不知道为什么会出现这个错误。
供稿人 Manuel Vázquez Acosta
命令行:在应用程序无法加载的情况下添加了正确的错误消息。
以前,celery 崩溃时出现异常。
我们现在打印正确的错误消息。
贡献者 Omer Katz
Task:添加了 :setting:`task_default_priority` 设置。
您现在可以使用 :setting:`task_default_priority` 设置来设置任务的默认优先级。 如果没有为特定任务提供优先级,将使用该设置的值。
贡献者 :github_user:`madprogrammer`
Dependencies:将 Kombu 的最低要求版本提高到 4.3,将台球提高到 3.6。
供稿人 Asif Saif Uddin
Result Backend:修复内存泄漏。
在 vine 中添加对 Python 2 的完整弱引用支持后,我们重新引入了对 AsyncResult 回调承诺绑定方法的弱引用。 更多细节可以在 celery/celery#4839 中找到。
由 George Psarakis 和 提供:github_user:`monsterxx03`。
任务执行:修复了急切任务的往返序列化。
在为急切任务执行往返序列化时,除非
celery.app.task.Task.apply_async()
调用中存在 serializer 参数,否则任务序列化器将始终为 JSON。 如果 serializer 参数存在但为 'pickle',则会引发异常,因为如果不指定 serialization.loads 应接受哪些内容类型,则无法反序列化 pickle 序列化对象。 Producer 的 serializer 似乎设置为 None,导致默认为 JSON 序列化。我们现在继续(按顺序)使用
celery.app.task.Task.apply_async()
的 serializer 参数(如果存在),或者 Producer 的序列化器(如果不存在)None . 如果 Producer 的序列化程序是 None,它将使用 Celery 应用程序的 task_serializer 配置条目作为序列化程序。贡献者 布雷特·杰克逊
Redis 结果后端:
celery.backends.redis.ResultConsumer
类不再假设celery.backends.redis.ResultConsumer.start()
在celery.backends.redis.ResultConsumer.drain_events()
之前被调用。这修复了使用 Gevent 工作池时的竞争条件。
贡献者 诺姆·库什
Task:添加了 :setting:`task_inherit_parent_priority` 设置。
将 :setting:`task_inherit_parent_priority` 配置选项设置为 True 将使 Celery 任务继承与其链接的前一个任务的优先级。
例子:
c = celery.chain( add.s(2), # priority=None add.s(3).set(priority=5), # priority=5 add.s(4), # priority=5 add.s(5).set(priority=3), # priority=3 add.s(6), # priority=3 )
@app.task(bind=True) def child_task(self): pass @app.task(bind=True) def parent_task(self): child_task.delay() # child_task will also have priority=5 parent_task.apply_async(args=[], priority=5)
贡献者 :github_user:`madprogrammer`
Canvas:添加了:setting:`result_chord_join_timeout` 设置。
以前,
celery.result.GroupResult.join()
的固定超时为 3 秒。:setting:`result_chord_join_timeout` 设置现在允许您更改它。
贡献者 :github_user:`srafehi`
代码清理、测试覆盖率和 CI 改进:
- 乔恩·杜福瑞
- 阿西夫·赛义夫·乌丁
- 奥默·卡茨
- 布雷特杰克逊
- 布鲁诺·阿拉
- :github_user:`tothegump`
- 博扬·约万诺维奇
- 弗洛里安·夏尔丹
- :github_user:`walterqian`
- 法比安·贝克尔
- 拉斯·林恩
- :github_user:`madprogrammer`
- 夏兰考特尼
文档修复:
- 刘易斯 M。 歌舞井
- 达什·温特森
- 沙纳瓦斯
- 布雷特·兰德尔
- 普热米斯瓦夫·苏利加
- 约书亚施密德
- 阿西夫·赛义夫·乌丁
- 晓东
- 维卡斯·普拉萨德
- 杰米·阿莱西奥
- 拉斯·克鲁斯
- 吉列尔梅·卡米尼亚
- 安德里亚·拉巴列蒂
- 意大利必丹
- 诺亚厅
- 彭伟康
- 玛丽亚塔·维贾亚
- 埃德·莫利
- 帕维尔·亚当恰克
- :github_user:`CoffeeExpress`
- :github_user:`aviadatsnyk`
- 布赖恩施拉德
- 乔苏·巴兰德拉诺·科罗内尔
- 汤姆克兰西
- 塞巴斯蒂安·沃伊切霍夫斯基
- 迈萨姆·阿扎德
- 威廉·蒂亚特
- 查尔斯·陈
- 奥默·卡茨
- 密林释迦