更改历史记录 — Python 文档
更改历史记录
本文档包含 4.4.x 系列中的错误修复和新功能的更改说明,请参阅 Celery 4.4 (Cliffs) 的新特性概述 Celery 4.4 中的新功能。
4.4.7
- 发布日期
- 2020-07-31 11.45 PM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 将 task_received、task_rejected 和 task_unknown 添加到信号模块。
- [ES 后端] 添加 401 作为重试的安全。
- 将内部错误视为失败。
- 删除 redis 扇出警告。
- 修复: -A 和 -args 应该表现相同。 (#6223)
- 基于类的任务自动重试 (#6233)
- 使用 Redis 结果后端保留组结果的顺序 (#6218)
- 用 celery.five Fixes #6250 替换 future,并使用 raise_with_context 而不是 reraise
- 修复 REMAP_SIGTERM=SIGQUIT 不起作用
- (Fixes#6258) MongoDB: 修复序列化问题 (#6259)
- 在 Redis 选择加入中使用有序集
- 测试、CI、Docker 和样式以及小的文档改进。
4.4.6
- 发布日期
- 2020-06-24 2.40 PM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 删除自动缩放 force_scale 方法 (#6085)。
- 修复自动缩放测试
- 将 ping 目标传递给请求
- chord:将初始化选项与运行选项合并
- 放回没有状态的 KeyValueStoreBackend.set 方法
- 为 celery multi 添加 –range-prefix 选项 (#6180)
- 向 AsyncResult 类添加了 as_list 函数 (#6179)
- 修复线程或 gevent 池中的 CassandraBackend 错误 (#6147)
- 昆布 4.6.11
4.4.5
- 发布日期
- 2020-06-08 12.15 PM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 添加对未来的缺失依赖 (#6146)。
- ElasticSearch:如果文档在索引之间被删除,则重试索引
- 修复 Windows 构建
- 自定义 chord_unlock 任务的重试间隔
- 在本地修复多个测试
4.4.4
- 发布日期
- 2020-06-03 11.00 AM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 使用显式重试修复 autoretry_for (#6138)。
- 昆布 4.6.10
- 使用 Django DB 最大年龄连接设置(修复 #4116)。
- 为后端添加可恢复异常的重试 (#6122)。
- 修复指数退避的抖动随机分布。
- ElasticSearch:添加设置以将元保存为 json。
- 修复 #6136。 celery 4.4.3 总是尝试创建 /var/run/celery 目录。
- 添加 task_internal_error 信号 (#6049)。
4.4.3
- 发布日期
- 2020-06-01 4.00 PM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 修复 s3 后端中的后端 utf-8 编码。
- 昆布 4.6.9
- 任务类定义可以具有重试属性 (#5869)
- 将pycurl升级到支持wheel的最新版本。
- 将正常运行时间添加到 stats inspect 命令
- 修复问题 #6019:获取时无法使用 mysql SSL 参数
- 清除 TraceBack 以减少异常任务的内存泄漏 (#6024)
- 例外: NotRegistered:修复语言
- 如果传输未连接,则放弃发送工作人员离线消息
- 将任务添加到 celery.__init__.py 中的 __all__
- 确保链中的单个链对象不会引发 MaximumRecursion
- 当 prefetch_multiplier 为 1 时修复自动缩放
- 允许 start_worker 在没有 ping 任务的情况下运行
- 更新 celeryd.conf
- 修复正确处理为 always_eager 模式配置序列化程序的问题。
- 删除 prefetch_multiplier 时 prefetch_count 增加的两倍
- 修复 Eager 函数在重试后不返回结果
- 如果不抛出和 is_eager 则返回重试结果
- 无论重新交付的标志如何,始终在工人丢失时重新排队
- 允许文件系统后端中的相对路径 (#6070)
- [已修复问题 #6017]
- 避免由于任务重复导致的竞争条件。
- 异常必须是旧式类或派生自 BaseException
- 修复 Windows 构建 (#6104)
- 在 base.py 中为元任务添加编码 (#5894)
- 更新 time.py 以解决微秒问题 (#5199)
- 将后端 _ensure_not_eager 错误更改为警告
- 添加对 'celery.chord_unlock' 任务的优先支持 (#5766)
- 更改急切重试行为
- 避免弹性搜索后端中的竞争条件
- 后端基础 get_many 传递 READY_STATES arg
- 为 Elasticsearch 添加集成测试并修复 _update
- 壮举(后端):向 ArangoDB 后端添加清理
- 删除 jython 检查
- 修复文件系统后端不能被picked序列化
4.4.0
- 发布日期
- 2019-12-16 9.45 AM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 此版本在 CPython 2.7、3.5、3.6、3.7 和 3.8 上得到官方支持,在 PyPy2 和 PyPy3 上也得到支持。
- 昆布 4.6.7
- 任务类定义可以具有重试属性 (#5869)
4.4.0rc5
- 发布日期
- 2019-12-07 21.05 AM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 昆布 4.6.7
- 如果没有事件,则禁用事件引导 (#5807)
- SQS - 拒绝失败 (#5843)
- 使用 ThreadPoolExecutor 添加并发模型 (#5099)
- 为 DynamoDB 后端添加自动过期 (#5805)
- 在所有后端存储扩展结果 (#5661)
- 修复发布非常大的和弦标题时的竞争条件 (#5850)
- 改进文档和测试矩阵
4.4.0rc4
- 发布日期
- 2019-11-11 00.45 AM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 昆布 4.6.6
- Py-AMQP 2.5.2
- 蟒蛇 3.8
- 大量错误修复
- pypy 7.2
4.4.0rc3
- 发布日期
- 2019-08-14 23.00 PM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 昆布 4.6.4
- 台球 3.6.1
- Py-AMQP 2.5.1
- 避免序列化日期时间 (#5606)
- 修复:(group() | group()) 不等于单个组 (#5574)
- 还原“代理连接使用应用程序配置中的心跳设置。
- 额外的文件描述符安全检查。
- 固定调用 null args (#5631)
- 添加了缓存后端的通用路径。
- 修复嵌套组(链(组))失败(#5638)
- 覆盖 __call__ 时使用 self.run() (#5652)
- 修复异步循环的终止 (#5671)
- 修复迁移任务以同时使用消息协议的 v1 和 v2。
- 在运行时更新 task_routes 配置现在生效。
4.4.0rc2
- 发布日期
- 2019-06-15 4:00 AM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- 修复了许多错误和回归。
- 昆布 4.6.3
4.4.0rc1
- 发布日期
- 2019-06-06 1:00 PM UTC+6:00
- 发布者
- 阿西夫·赛义夫·乌丁
- Python 3.4 掉落
- 昆布 4.6.1
- 替换已弃用的 PyMongo 方法用法 (#5443)
- 调用 update_state 时传递任务请求 (#5474)
- 修复 DST 时间更改时剩余时间计算的错误 (#5411)
- 修复请求扩展结果时丢失的任务名称 (#5439)
- 修复 Python 2.7 上的 collections 导入问题 (#5428)
- 处理基本后端异常反序列化器中的 AttributeError (#5435)
- 使 AsynPool 的 proc_alive_timeout 可配置 (#5476)
- AMQP 支持扩展结果 (#5495)
- 修复 SQL Alchemy 结果后端以使用扩展结果 (#5498)
- 使用所需参数修复异常恢复 (#5500)
- Django:如果 ImportError 不是由缺少任务模块引起的,则重新引发异常 (#5211)
- Django:修复了当 CONN_MAX_AGE != 0 时将数据库连接置于无效状态的回归 (#5515)
- 修复了 OSError 导致失去与代理的连接 (#4457)
- 修复了检查 API 无法获取请求详细信息的问题
- 修复 mogodb 后端身份验证 (#5527)
- 将扩展任务元参数/kwargs 的列类型更改为 LargeBinary
- 在 Elasticsearch 后端结果中处理 http_auth (#5545)
- 修复任务序列化程序被 task_always_eager=True (#5549) 忽略
- 修复 task.replace 以在 .apply() 以及 `.apply_async() 中工作 (#5540)
- 修复发送 worker_process_init 信号给 solo worker (#5562)
- 修复异常消息打包 (#5565)
- 为 beat_schedule 添加延迟参数函数 (#5558)
- 多个文档更新
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`
- 布赖恩施拉德
- 乔苏·巴兰德拉诺·科罗内尔
- 汤姆克兰西
- 塞巴斯蒂安·沃伊切霍夫斯基
- 迈萨姆·阿扎德
- 威廉·蒂亚特
- 查尔斯·陈
- 奥默·卡茨
- 密林释迦