更改历史记录 — Python 文档

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

更改历史记录

本文档包含 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
发布者
奥默·卡茨
  • Canvascelery.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 门户中存储帐户资源的密钥 窗格。

    贡献者 克莱门斯·沃尔夫

  • Taskcelery.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 Backendcelery.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 Beatcelery.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`
  • 布赖恩施拉德
  • 乔苏·巴兰德拉诺·科罗内尔
  • 汤姆克兰西
  • 塞巴斯蒂安·沃伊切霍夫斯基
  • 迈萨姆·阿扎德
  • 威廉·蒂亚特
  • 查尔斯·陈
  • 奥默·卡茨
  • 密林释迦