Celery 3.0 的更改历史记录 — Python 文档

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

Celery 3.0 的更改历史记录

如果您正在寻找 3.0.x 之前的版本,您应该转到 History

3.0.24

发布日期
2013-10-11 04:40 下午 BST
发布者
问庄严
  • 现在取决于 Kombu 2.5.15

  • 现在依赖于 :pypi:`billiard` 版本 2.7.3.34。

  • AMQP 结果后端:不再缓存队列声明。

    AMQP 结果后端创建的队列始终是唯一的,因此缓存声明会导致缓慢的内存泄漏。

  • Worker:修复了主机名包含 Unicode 字符时的崩溃问题。

    由道道贡献。

  • 如果选择了 -P solo 池,worker 将不再启动(问题 #1548)。

  • 如果重试任何任务,Redis/Cache 结果后端将不会完成和弦(问题 #1401)。

  • 如果应用程序完成,任务装饰器不再懒惰。

  • AsyncResult:修复了 copy(AsyncResult) 没有可用 current_app 时的错误。

  • 结果集:现在在传递字符串 id 时正确传播应用程序。

  • 如果值为空字符串,加载程序现在会忽略 CELERY_CONFIG_MODULE

  • 修复了代理对象中尝试删除属性两次的竞争条件,导致 AttributeError

  • 任务方法现在适用于 :setting:`CELERY_ALWAYS_EAGER` 设置(问题 #1478)。

  • Broadcast 队列在发布任务时被意外声明(问题 #1540)。

  • 新的 C_FAKEFORK 环境变量可用于调试初始化脚本。

    设置此项将跳过守护程序步骤,以便可以看到在标准输出关闭后打印到 stderr 的错误:

    $ C_FAKEFORK /etc/init.d/celeryd start

    这通常与 celery multi 命令一起使用。

  • get_pickleable_etype 并不总是返回一个值(问题 #1556)。

  • 修复了 app.GroupResult.restore 会回退到默认应用程序的错误。

  • 修复了内置任务使用 current_app 的罕见错误。

  • maybe_fileno() 现在处理 ValueError


3.0.23

发布日期
2013-09-02 01:00 下午 BST
发布者
问庄严
  • 现在取决于 Kombu 2.5.14

  • send_task 不支持 linklink_error 参数。

    这具有连锁不调用未注册任务的副作用,默默地丢弃它们。

    修复由 Taylor Nelson 提供。

  • celery.state:优化优先级查找。

    由马特·罗伯诺特提供。

  • POSIX:守护进程没有将 sys.stdin 重定向到 /dev/null

    修复由 Alexander Smirnov 贡献。

  • 画布:使用 .apply_async 时,组错误导致回退到默认应用程序(问题#1516)

  • Canvas:生成器参数并不总是可以选择的。


3.0.22

发布日期
2013-08-16 04:30 下午 BST
发布者
问庄严
  • 现在取决于 Kombu 2.5.13

  • 现在取决于 :pypi:`billiard` 2.7.3.32

  • 修复了每月和每年 Crontab 的错误(问题 #1465)。

    修复由纪尧姆 Gauvrit 贡献。

  • 修复了由时间限制引起的内存泄漏(Issue #1129,Issue #1427)

  • 如果在一秒内重新启动超过 5 次,Worker 现在将进入睡眠状态,以避免垃圾邮件 worker-online 事件。

  • 包括文档修复

    贡献者:Ken Fromm、Andreas Savvides、Alex Kiriukha、Michael Fladischer。


3.0.21

发布日期
2013-07-05 04:30 下午 BST
发布者
问庄严
  • 现在取决于 :pypi:`billiard` 2.7.3.31。

    此版本修复了在没有台球 C 扩展的情况下运行时的错误。

  • 3.0.20 破坏了 eventlet/gevent 支持(worker 没有启动)。

  • 修复了 MongoDB 结果后端与 gevent 池一起使用时的内存泄漏问题。

    修复由罗斯劳利贡献。


3.0.20

发布日期
2013-06-28 04:00 下午 BST
发布者
问庄严
  • 包含解决死锁问题的方法。

    更好的解决方案将是 Celery 3.1 的一部分。

  • 现在取决于 Kombu 2.5.12

  • 现在取决于 :pypi:`billiard` 2.7.3.30。

  • --loader 参数不再支持从当前目录导入加载器。

  • [Worker] 修复了连接丢失后重新启动时的内存泄漏(问题 #1325)。

  • [Worker] 修复了启动时的 UnicodeDecodeError(问题 #1373)。

    由 Jessica Tallon 贡献的修复。

  • [Worker] 现在再次正确地重写不可选择的异常。

  • 修复了从已撤销的任务集中驱逐项目时可能出现的竞争条件。

  • [generic-init.d] 修复了与 Ubuntu 最小 Dash shell 的兼容性(问题 #1387)。

    :github_user:`monkut` 贡献的修复。

  • Task.apply/ALWAYS_EAGER 现在也执行回调和 errbacks(问题 #1336)。

  • [Worker] 不再发送 :signal:`worker-shutdown` 信号(Issue #1339)j

  • [Python 3] 修复了 threading.Event 的问题。

    修复由 Xavier Ordoquy 贡献。

  • [Python 3] 现在处理 io.UnsupportedOperation 可能由 Python 3 中的 file.fileno() 引发。

  • [Python 3] 修复了 qualname 的问题。

  • [events.State] 现在忽略未知的事件组。

  • [MongoDB 后端] 不再使用已弃用的 safe 参数。

    :github_user:`rfkrocktk` 贡献的修复。

  • eventlet 池现在在 Windows 上导入。

  • [画布] 修复了不可变和弦成员可能会收到参数的回归(问题 #1340)。

    修复由彼得布鲁克贡献。

  • [Canvas] 链现在再次接受生成器参数(问题 #1319)。

  • 如果没有指定队列,celery.migrate 命令现在从所有队列消耗。

    修复由约翰沃森贡献。


3.0.19

发布日期
2013-04-17 04:30:00 下午 BST
发布者
问庄严
  • 现在取决于 :pypi:`billiard` 2.7.3.28

  • 与 Python 3 相关的修复设法禁用了 3.0.18 中宣布的死锁修复。

    已添加测试以确保不会再次发生这种情况。

  • 任务重试策略:默认 max_retries 现在为 3。

    这确保客户端不会在代理关闭时挂起。

    笔记

    您可以使用 :signal:`celeryd_after_setup` 信号为 worker 设置更长的重试时间:

    from celery.signals import celeryd_after_setup
    
    @celeryd_after_setup.connect
    def configure_worker(instance, conf, **kwargs):
        conf.CELERY_TASK_PUBLISH_RETRY_POLICY = {
            'max_retries': 100,
            'interval_start': 0,
            'interval_max': 1,
            'interval_step': 0.2,
        }
  • Worker:即使正文是缓冲区实例,现在也会在错误消息中正确显示消息正文。

  • 3.0.18 破坏了 MongoDB 结果后端(问题 #1303)。


3.0.18

发布日期
2013-04-12 05:00:00 下午 BST
发布者
问庄严
  • 现在取决于 :pypi:`kombu` 2.5.10。

    请参阅 kombu 更新日志

  • 现在取决于 :pypi:`billiard` 2.7.3.27。

  • 现在可以使用新的 :setting:`CELERY_ACCEPT_CONTENT` 设置指定已接受序列化程序的白名单。

    这意味着您可以强制工作人员丢弃使用 pickle 和其他不受信任的序列化程序序列化的消息。 例如只允许 JSON 序列化消息使用:

    CELERY_ACCEPT_CONTENT = ['json']

    您还可以在白名单中指定 MIME 类型:

    CELERY_ACCEPT_CONTENT = ['application/json']
  • 修复了由信号终止时信号量未释放导致的多处理池中的死锁。

  • 进程池:现在可以使用 GDB 调试池进程。

  • celery report 现在审查可能的秘密设置,例如密码和秘密令牌。

    在将任何内容粘贴到 Internet 上之前,您仍应检查输出。

  • 连接 URL 现在忽略多个“+”标记。

  • Worker/statedb:现在使用 pickle 协议 2 (Python 2.5+)

  • 修复了 Python 3 兼容性问题。

  • 工作人员:如果工作人员以与现有工作人员相同的节点名称启动,则会发出警告。

  • Worker:修复了在撤销任务时可能发生的死锁(问题 #1297)。

  • Worker::sig:`HUP` 处理程序现在在重新启动之前关闭所有打开的文件描述符,以确保文件描述符不会泄漏(问题 #1270)。

  • Worker:优化存储/加载已撤销任务列表(Issue #1289)。

    更改后,celery worker --statedb 文件将占用更多磁盘空间,但加载和存储已撤销任务的速度将明显加快(以前需要 5 分钟的时间现在只需不到一秒)。

  • 如果代理传输名称中有拼写错误,Celery 现在会建议替代方案(例如,ampq -> amqp)。

  • 工人:如果被监控的文件被取消链接,自动重新加载器会导致崩溃。

    修复由 Agris Ameriks 贡献。

  • 修复了 AsyncResult 酸洗错误。

    修复由 Thomas Minor 贡献。

  • 修复了使用日志颜色时日志输出中 Unicode 的处理(问题 #427)。

  • ConfigurationView 现在是 MutableMapping

    由亚伦·哈恩利提供。

  • 修复了 LRU 缓存实现中的内存泄漏。

    修复由 Romuald Brunet 贡献。

  • celery.contrib.rdb:现在当套接字处于非阻塞模式时有效。

    修复由 Theo Spears 贡献。

  • inspect reserved 远程控制命令包括活动(已启动)任务和保留任务(问题 #1030)。

  • :signal:`task_failure` 信号接收到一个修改的回溯对象,用于酸洗目的,这已经得到修复,现在它接收真正的回溯。

  • @task 装饰器默默地忽略了位置参数,现在它会引发预期的 TypeError(问题 #1125)。

  • 工作人员现在将正确处理带有无效 ETA/expires 字段的消息(问题 #1232)。

  • 如果 :setting:`CELERYD_POOL_RESTARTS` 设置未设置,pool_restart 远程控制命令现在会报告错误。

  • @add_defaults`() 现在可以用于非 dict 对象。

  • 修复了 Proxy 类中的兼容性问题(问题 #1087)。

    类属性 __module____name____doc__ 现在是有意义的字符串对象。

    感谢马里乌斯·格德米纳斯。

  • MongoDB 后端::setting:`MONGODB_BACKEND_SETTINGS` 设置现在接受 option 键,可让您将任意 kwargs 转发到底层 pymongo.Connection 对象(问题 #1015)。

  • Beat:不再为支持自动结果过期的结果后端启用每日后端清理任务(问题 #1031)。

  • 画布列表操作现在从列表中的第一个任务中获取应用程序实例,而不是依赖于 current_app(问题 #1249)。

  • Worker:消息解码错误日志消息现在包括回溯信息。

  • 工人:启动横幅现在包括系统平台。

  • celery inspect|status|control 如果与基于 SQL 的代理传输一起使用,现在会出现错误。


3.0.17

发布日期
2013-03-22 04:00:00 下午 世界标准时间
发布者
问庄严
  • 现在取决于kombu 2.5.8

  • 现在取决于台球 2.7.3.23

  • RabbitMQ/Redis:无线程和无锁的速率限制实现。

    这意味着当与 RabbitMQ/Redis 或使用事件循环的未来传输一起使用时,速率限制带来的开销最小,并且速率限制实现现在是无线程和无锁的。

    基于线程的传输现在仍将使用旧的实现,但计划是将计时器也用于 Celery 3.1 中的其他代理传输。

  • 如果使用 RabbitMQ/Redis 作为代理,速率限制现在适用于 eventlet/gevent。

  • 回归导致 task.retry 忽略其他关键字参数。

    额外的关键字参数现在再次用作执行选项。 修复由 Simon Engledew 贡献。

  • Windows:修复了工作人员在工作人员启动时尝试腌制 Django 设置模块的问题。

  • generic-init.d:不再双引号 $CELERYD_CHDIR(问题 #1235)。

  • generic-init.d:删除特定于 bash 的语法。

    由 Pär Wieslander 贡献的修复。

  • Cassandra 结果后端:现在处理 AllServersUnavailable 错误(问题 #1010)。

    修复由 Jared Biel 贡献。

  • 结果:现在反序列化时正确地将应用程序转发到 GroupResults(问题 #1249)。

    修复由 Charles-Axel Dein 贡献。

  • GroupResult.revoke 现在支持 terminatesignal 关键字参数。

  • 工作器:多处理池工作器现在在设置日志记录系统之前导入任务模块/配置,以便可以在发送日志信号之前连接它们。

  • chord:返回的 AsyncResult 实例现在将其 parent 属性设置为标题 GroupResult

    这与 chain 的工作方式一致。


3.0.16

发布日期
2013-03-07 04:00:00 下午 世界标准时间
发布者
问庄严
  • 国际妇女节快乐!

    我们还有很长的路要走,所以这是您参与其中一个致力于使我们的社区更加多元化的组织的机会。

  • 现在依赖于 :pypi:`kombu` 版本 2.5.7

  • 现在依赖于 :pypi:`billiard` 版本 2.7.3.22

  • AMQP 心跳现在默认禁用。

    一些用户在启用心跳时遇到问题,并不是绝对必须使用它们。

    如果您在检测连接失败时遇到问题,您可以通过配置 :setting:`BROKER_HEARTBEAT` 设置来重新启用心跳。

  • Worker:现在传播多处理回调中发生的连接错误,以便可以重置连接(问题 #1226)。

  • Worker:现在传播发生在计时器回调中的连接错误,以便可以重置连接。

  • :setting:`CELERY_IMPORTS`:setting:`CELERY_INCLUDE` 中的模块现在按原始顺序导入(Issue #1161)。

    :setting:`CELERY_IMPORTS` 中的模块会先导入,然后再导入 :setting:`CELERY_INCLUDE`

    感谢乔伊威廉。

  • git 存储库中可用的 celery 的新 bash 补全:

    https://github.com/celery/celery/tree/3.0/extra/bash-completion

    您可以获取此文件或将其放入 bash_completion.d 以获取 celery 命令行实用程序的自动完成功能。

  • worker 的节点名称现在可以包含 unicode 字符(问题 #1186)。

  • crontab 对象的 repr 现在可以正确显示(问题 #972)。

  • events.State 不再修改原始事件字典。

  • 不再使用 Python 3 中弃用的 Logger.warn

  • 缓存后端:现在再次使用和弦(问题 #1094)。

  • 和弦解锁现在可以处理调用回调时发生的错误。

  • 通用工作者 init.d 脚本:现在通过查询实例的 pid 而不是发送消息来执行状态检查。

    米伦·巴甫洛夫供稿。

  • 改进了 CentOS 的初始化脚本。

    • 更新以支持 Celery 3.x 约定。

    • 现在使用 CentOS 内置 statuskillproc

    • 支持多节点/多 pid 工作者服务。

    • 标准颜色编码的 CentOS 服务初始化输出。

    • 一个测试套件。

    米伦·巴甫洛夫供稿。

  • ResultSet.join 现在总是适用于空结果集(问题 #1219)。

  • 现在支持由单个任务组成的 group(问题 #1219)。

  • 现在支持 pycallgraph 程序(问题 #1051)。

  • 修复了 Jython 兼容性问题。

  • Django 教程:现在提到必须将示例应用程序添加到 INSTALLED_APPS(问题 #1192)。


3.0.15

发布日期
2013-02-11 04:30:00 下午 世界标准时间
发布者
问庄严


3.0.14

发布日期
2013-02-08 05:00:00 下午 世界标准时间
发布者
问庄严
  • 现在取决于 Kombu 2.5.6

  • 现在取决于台球 2.7.3.20

  • execv 现在默认禁用。

    它给用户带来了太多问题,您仍然可以使用 CELERYD_FORCE_EXECV 设置启用它。

    execv 仅在使用 AMQP/Redis 以外的传输时启用,它用于防止在进程分叉之前没有释放互斥锁导致的死锁。 不幸的是,它也改变了环境,引入了许多在不添加可怕的黑客的情况下很难修复的极端情况错误。 死锁问题的报告频率远低于 execv 导致的错误,因此我们现在默认禁用它。

    正在努力创建这些传输的非阻塞版本,以便不需要 execv(这是 amqp 和 redis 代理传输的情况)

  • 已定义和弦异常行为(问题 #1172)。

    从 Celery 3.1 开始,当和弦的任务部分引发异常时,和弦回调将状态更改为 FAILURE。

    从来没有记录在这种情况下会发生什么,实际行为非常不令人满意,实际上它只会将异常值转发给和弦回调。

    出于向后兼容性的原因,我们不会在错误修复版本中更改为新行为,即使从未记录当前行为。 相反,您可以启用 :setting:`CELERY_CHORD_PROPAGATES` 设置以获取 Celery 3.1 默认的新行为。

    错误处理 中查看更多信息。

  • worker:修复忽略和重试任务的错误。

    on_chord_part_returnTask.after_return 回调,或者 task_postrun 信号在任务被重试/忽略时应该被调用。

    修复由弗拉德贡献。

  • GroupResult.join_native 现在尊重 propagate 参数。

  • subtask.id 作为别名添加到 subtask['options'].id

    >>> s = add.s(2, 2)
    >>> s.id = 'my-id'
    >>> s['options']
    {'task_id': 'my-id'}
    
    >>> s.id
    'my-id'
  • worker:修复了连接失败后重新启动时发生的错误 无法启动工作进程 (问题 #1118)。

  • 添加新信号 :signal:`task-reried`(问题 #1169)。

  • celery events –dumper 现在处理连接丢失。

  • 现在将在连接失败的情况下重试发送任务发送事件。

  • amqp 后端:现在使用 Message.requeue 而不是在轮询后重新发布消息。

  • 引入了新的 :setting:`BROKER_HEARTBEAT_CHECKRATE` 设置以修改代理连接心跳的监控速率。

    默认值也从 3.0 更改为 2.0。

  • celery.events.state.State 现在可以腌制。

    修复由 Mher Movsisyan 贡献。

  • celery.utils.functional.LRUCache 现在可以腌制。

    修复由 Mher Movsisyan 贡献。

  • stats 广播命令现在包括工作人员 pid。

    由 Mher Movsisyan 提供。

  • 新的 conf 远程控制命令来获取工人的当前配置。

    由 Mher Movsisyan 提供。

  • 添加修改和弦解锁任务的倒计时参数的功能(问题 #1146)。

    酒井淳供稿

  • beat:调度器现在使用schedule的now()`方法,因此schedules可以提供一种自定义的方式来获取当前的日期和时间。

    由 Raphaël Slinckx 提供

  • 修复了 Windows 上或使用 execv 时配置模块的酸洗(问题 #1126)。

  • 多处理记录器现在默认配置为日志级别 ERROR

    从 3.0 开始,默认情况下禁用多处理记录器(仅在设置 MP_LOG 环境变量时才配置)。


3.0.13

发布日期
2013-01-07 04:00:00 下午 世界标准时间
发布者
问庄严
  • 现在取决于 Kombu 2.5

    • :pypi:`amqp` 已取代 :pypi:`amqplib` 作为默认传输,获得对 AMQP 0.9 和 RabbitMQ 扩展的支持,包括消费者取消通知和心跳。

    • 支持用于故障转移的多个连接 URL。

    • Kombu 2.5 更新日志 中阅读更多内容。


  • 现在取决于台球 2.7.3.19

  • 修复了生产者池继承父进程的连接池实例时可能出现的死锁问题。

  • --loader 选项现在再次起作用(问题 #1066)。

  • celery 伞形命令:所有子命令现在都支持 --workdir 选项(问题 #1063)。

  • 链中包含的组现在提供 GroupResults(问题 #1057)

    以前它会错误地添加常规结果而不是组结果,但现在这有效:

    >>> # [4 + 4, 4 + 8, 16 + 8]
    >>> res = (add.s(2, 2) | group(add.s(4), add.s(8), add.s(16)))()
    >>> res
    <GroupResult: a0acf905-c704-499e-b03a-8d445e6398f7 [
        4346501c-cb99-4ad8-8577-12256c7a22b1,
        b12ead10-a622-4d44-86e9-3193a778f345,
        26c7a420-11f3-4b33-8fac-66cd3b62abfd]>
  • 链现在可以链接其他链并使用部分参数(问题#1057)。

    示例:

    >>> c1 = (add.s(2) | add.s(4))
    >>> c2 = (add.s(8) | add.s(16))
    
    >>> c3 = (c1 | c2)
    
    >>> # 8 + 2 + 4 + 8 + 16
    >>> assert c3(8).get() == 38
  • 子任务现在可以用于未注册的任务。

    即使您只有名称,也可以指定子任务:

    >>> s = subtask(task_name, args=(), kwargs=())
    >>> s.delay()
  • celery shell 命令现在总是将当前目录添加到模块路径中。

  • 工作人员现在将正确处理在 DST 转换中准备 ETA/倒计时时引发的 pytz.AmbiguousTimeError 异常(问题 #1061)。

  • force_execv:现在确保原始任务模块中的任务符号将始终使用正确的应用程序实例(问题 #1072)。

  • AMQP 后端:现在重新发布已经轮询的结果消息(使用 result.ready() 和朋友,result.get() 在此版本中不会这样做)。

  • Crontab 计划值现在可以“环绕”

    这意味着像 11-1 这样的值会转换为 [11, 12, 1]

    由洛伦艾布拉姆斯提供。

  • multi stopwait 命令现在显示进程的 pid。

    由洛伦艾布拉姆斯提供。

  • :setting:`CELERY_ENABLE_UTC` 时修复 ETA/倒计时的处理

    设置被禁用(问题 #1065)。

  • 由于意外将 Queue.as_dict 作为消息属性传递,导致消息中包含许多不需要的属性。

  • 速率限制值现在可以是浮动的

    这也扩展了字符串格式,以便像 "0.5/s" 这样的值起作用。

    克里斯托夫·克里布斯供稿

  • 修复了广播路由文档中的一个错字(问题 #1026)。

  • 在任务用户指南中重写了有关幂等性的令人困惑的部分。

  • 修复了守护程序教程中的错字(问题 #1055)。

  • 修复了文档中的几个错别字。

    由马里乌斯·格德米纳斯 (Marius Gedminas) 提供。

  • 批处理:现在在使用 eventlet 池时有效。

    修复由 Thomas Grainger 贡献。

  • 批量:添加示例发送结果到 celery.contrib.batches

    由托马斯·格兰杰贡献。

  • MongoDB 后端:现在可以在 :setting:`CELERY_MONGODB_BACKEND_SETTINGS` 中设置连接 max_pool_size

    克雷格·扬金斯提供。

  • 修复了使用早期版本 时的问题:pypi:`pytz`

    修复由弗拉德贡献。

  • 文档更新以包含 :setting:`CELERY_TASK_RESULT_EXPIRES` 设置的默认值。

  • :pypi:`django-celery` 教程的改进。

    由 Locker537 提供。

  • add_consumer 控制命令没有正确地持续添加新队列,以便它们在连接失败时幸存下来(问题 #1079)。


3.0.12

发布日期
2012-11-06 02:00 下午 世界标准时间
发布者
问庄严
  • 现在取决于kombu 2.4.8

    • [Redis] 新的和改进的公平队列循环算法(Kevin McCarthy)。

    • [Redis] 现在在恢复消息时使用基于 Redis 的互斥锁。

    • [Redis] 一个区间可以恢复的消息数是no

      更长的限制(但可以使用unacked_restore_limit :setting:`传输选项 ` )。

    • 心跳值可以在代理 URL (Mher Movsisyan) 中指定。

    • 修复了 Python 3 (Jasper Bryant-Greene) 上的 msgpack 问题。


  • 现在取决于台球 2.7.3.18

  • Celery 现在可以与 PyDev/PyCharm/pylint 等静态分析工具一起使用。

  • 开发文档已移至阅读文档。

  • 新的 :setting:`CELERY_QUEUE_HA_POLICY` 设置用于在使用 RabbitMQ 时为队列设置默认 HA 策略。

  • 新方法 Task.subtask_from_request 使用当前请求返回子任务。

  • 结果 get_many 方法不尊重超时参数。

    Remigiusz Modrzejewski 贡献的修复

  • generic_init.d 脚本现在支持设置 CELERY_CREATE_DIRS 以始终创建日志和 pid 目录(问题 #1045)。

    这可以在您的 /etc/default/celeryd 中设置。

  • 修复了 Python 3.2 上奇怪的海带导入问题(问题 #1034)。

  • Worker:ETA 调度程序现在使用毫秒精度(问题 #1040)。

  • 所有加载程序现在都支持程序的 --config 参数。

  • :setting:`CASSANDRA_OPTIONS` 设置现已被记录。

    贾里德·比尔供稿。

  • 任务方法 (celery.contrib.methods) 不能与旧的任务基类一起使用,该模块中的任务装饰器现在继承自新的。

  • 优化过于急切,导致一些日志消息永远不会发出。

  • celery.contrib.batches 现在又可以工作了。

  • 修复了 bdist_rpm 要求中缺少的空白(问题 #1046)。

  • 在按名称过滤之前,事件状态的 tasks_by_name 应用了限制。

    修复由 Alexander A. 索斯诺夫斯基。


3.0.11

发布日期
2012-09-26 04:00 下午 世界标准时间
发布者
问庄严
  • [security:low] generic-init.d 脚本更改了 /var/log 和 /var/run 的权限

    在守护教程中推荐的目录如下:

    CELERYD_LOG_FILE="/var/log/celery/%n.log"
    CELERYD_PID_FILE="/var/run/celery/%n.pid"

    但是在脚本本身中,默认文件是 /var/log/celery%n.log/var/run/celery%n.pid,所以如果用户没有通过配置更改位置,目录 /var/log/var/run ] 将被创建 - 更糟糕的是他们的权限和所有者发生了变化。

    这一变化意味着:

    • 默认pid文件是/var/run/celery/%n.pid

    • 默认日志文件为 /var/log/celery/%n.log

    • 如果未设置自定义位置,则仅创建目录并更改其权限。


    用户可以通过调用 create-paths 子命令来强制创建路径:

    $ sudo /etc/init.d/celeryd create-paths

    升级 Celery 不会更新初始化脚本

    要更新初始化脚本,您必须从源代码管理重新下载文件并手动更新它们。 您可以在以下位置找到 3.0.x 版的初始化脚本:

  • 现在取决于台球 2.7.3.17

  • 修复了多次初始化应用程序时的请求堆栈保护(问题 #1003)。

  • 当系统时区与配置的时区不同时,ETA 任务现在可以正常工作(问题 #1004)。

  • 如果任务已发送到池但尚未被池进程确认,则终止任务现在可以工作(问题 #1007)。

    修复由 Alexey Zatelepin 贡献

  • 终止任务现在可以正确更新任务的状态以撤销,并发送 task-revoked 事件。

  • 通用工作者初始化脚本现在默认等待工作者关闭。

  • Multi:不再解析 –app 选项(问题 #1008)。

  • Multi:stop_verify 命令重命名为 stopwait

  • 守护进程:现在将尝试创建 pidfile/logfile 延迟到工作目录被更改后。

  • celery workercelery beat 命令现在尊重 --no-color 选项(问题 #999)。

  • 修复了 eventlet 示例中的拼写错误(问题 #1000)

    由 Bryan Bishop 提供的修复。 恭喜您打开错误 #1000!

  • 现在确认引发 Ignore 的任务。

  • Beat:现在在 sending due task 日志中显示条目的名称。


3.0.10

发布日期
2012-09-20 05:30 下午 BST
发布者
问庄严
  • 现在取决于kombu 2.4.7

  • 现在取决于台球 2.7.3.14

    • 修复了使用 Django 和 1.4 之前的项目 (setup_environ) 时启动时崩溃的问题。

    • 硬时间限制现在在 TERM 后不久发送 KILL 信号,以终止信号处理程序被 C 扩展阻止的进程。

    • 即使无法构建 C 扩展,台球现在也会安装。

      如果您使用的是 RabbitMQ/Redis 以外的传输(或出于其他原因使用强制 execv),仍然建议构建 C 扩展。

    • 池现在设置 current_process().index 属性,可用于创建与池中的进程一样多的日志文件。


  • 画布:和弦/组/链在调用时不再修改状态

    之前调用 chord/group/chain 会修改子任务的 id,以便:

    >>> c = chord([add.s(2, 2), add.s(4, 4)], xsum.s())
    >>> c()
    >>> c() <-- call again

    第二次任务的 id 将与前一次调用中的相同。 现在已修复,因此调用子任务不会改变任何选项。

  • 画布:将和弦链接到另一个任务现在可以工作(问题 #965)。

  • Worker:修复了如果使用相对导入可能会损坏请求堆栈的错误。

    在尝试发送失败的任务结果 (NoneType does not have id attribute) 时,问题通常表现为异常。

    修复由 Sam Cooke 贡献。

  • 任务现在可以引发 Ignore 以在返回后跳过更新状态或事件。

    示例:

    from celery.exceptions import Ignore
    
    @task
    def custom_revokes():
        if redis.sismember('tasks.revoked', custom_revokes.request.id):
            raise Ignore()
  • 工作人员现在确保请求/任务堆栈不会被初始的 Task.__call__ 修改。

    如果自定义任务类定义了 __call__ 并且也称为 super(),那么这在以前会是一个问题。

  • 由于问题,快速局部优化已被禁用,只能通过设置 USE_FAST_LOCALS 属性来启用。

  • Worker:现在将关闭时的默认套接字超时设置为 5 秒,以便中断的套接字读取不会妨碍正常关闭(问题 #975)。

  • 更多与后期 eventlet/gevent 补丁相关的修复。

  • 与现实不同步的设置文档:

    修复由 Matt Long 贡献。

  • Worker:已改进连接建立和丢失时的日志消息。

  • Crontab 计划值 '0' 的 repr 应为 '*'(问题 #972)。

  • 撤销的任务现在从工作人员的保留/活动状态中删除(问题#969)

    修复由 Alexey Zatelepin 贡献。

  • gevent:现在支持使用 gevent.Timeout 的硬时间限制。

  • 文档:init-scripts 的链接现在指向 3.0 分支而不是开发分支(master)。

  • 文档:修复了信号用户指南中的错字(问题 #986)。

    instance.app.queues -> instance.app.amqp.queues

  • Eventlet/gevent:worker 没有为新的 greenlets 正确设置自定义应用程序。

  • Eventlet/gevent:修复了工作人员无法从连接丢失中恢复的错误(问题 #959)。

    此外,由于 gevent 中的可疑错误 :setting:`BROKER_CONNECTION_TIMEOUT` 设置在使用 gevent 时已被禁用


3.0.9

发布日期
2012-08-31 06:00 下午 BST
发布者
问庄严
  • Django 和数据库调度程序用户的重要提示!

    最近修复了周期性任务的时区问题,但错误的时区可能已经存储在数据库中,因此要使修复生效,您需要重置 last_run_at 字段。

    您可以通过执行以下命令来做到这一点:

    $ python manage.py shell
    >>> from djcelery.models import PeriodicTask
    >>> PeriodicTask.objects.update(last_run_at=None)

    如果您更改时区或 :setting:`CELERY_ENABLE_UTC` 设置,您也必须这样做。

  • 注意 :setting:`CELERY_ENABLE_UTC` 设置。

    如果您之前禁用此功能只是为了强制定期任务使用您的时区,那么现在 鼓励您重新启用它

  • 现在依赖于 Kombu 2.4.5,它修复了 PyPy + Jython 安装。

  • 修复了 :setting:`CELERY_ENABLE_UTC` 禁用时的时区错误(问题 #952)。

  • 修复了 celerybeat 升级机制中的一个错字(问题 #951)。

  • 确保解决了日志记录的 exc_info 参数(问题 #899)。

  • 修复了 Python 3.2 和线程连接超时溢出的问题(问题 #796)。

  • Python 2.5 的测试用例偶尔会被破坏。

  • 单元测试套件现在通过 PyPy 1.9。

  • 应用实例现在支持 [X31X] 语句。

    这会在退出时调用新的 @close() 方法,该方法会在应用程序之后进行清理,例如关闭池连接。

    请注意,这仅在动态创建应用程序时才需要,例如“临时”应用程序。

  • 支持将子任务通过管道传输到链。

    例如:

    pipe = sometask.s() | othertask.s()
    new_pipe = mytask.s() | pipe

    史蒂夫·莫林供稿。

  • 修复了非 pickle 序列化程序的组结果问题。

    修复由史蒂夫莫林贡献。


3.0.8

发布日期
2012-08-29 05:00 下午 BST
发布者
问庄严
  • 现在取决于 Kombu 2.4.4

  • 修复了 :pypi:`amqplib` 和接收更大消息有效负载的问题(问题 #922)。

    问题会表现为工人挂起,或者偶尔出现 Framing error 异常。

    新的 pyamqp:// 传输的用户必须升级到 :pypi:`amqp` 0.9.3。

  • Beat:修复了另一个具有间隔和 Crontab 计划的时区错误(问题 #943)。

  • 节拍:如果时区发生变化,现在会自动清除计划文件。

    当您从早期版本升级到 3.0.8 时,计划也会被清除,这是为了注册初始时区信息。

  • 事件::event:`worker-heartbeat` 事件现在包括已处理和活动计数字段。

    由 Mher Movsisyan 提供。

  • 修复了错误电子邮件和新任务类的错误(问题 #931)。

  • BaseTask.__call__ 如果已被猴子修补,则不再优化掉。

  • 修复了使用 gevent 时的关机问题(问题 #911 和问题 #936)。

    修复由 Thomas Meson 贡献。


3.0.7

发布日期
2012-08-24 05:00 下午 BST
发布者
问庄严
  • 修复了周期性任务和时区的几个问题(问题 #937)。

  • 现在取决于kombu 2.4.2

    • Redis:修复了竞争条件崩溃

    • 修复了重试建立代理连接时可能发生的无限循环。


  • 守护进程现在将标准文件描述符重定向到 /dev/null

    虽然默认情况下,标准输出也被重定向到记录器,但您可以通过更改 :setting:`CELERY_REDIRECT_STDOUTS` 设置来禁用它。

  • 修复了当 eventlet/gevent 修补得太晚时可能出现的问题。

  • LoggingProxy 不再定义 fileno()(问题 #928)。

  • 现在将忽略和弦解锁任务的结果。

    修复由史蒂夫莫林贡献。

  • 如果结果过期被禁用,Cassandra 后端现在可以工作。

    修复由史蒂夫莫林贡献。

  • 回溯对象现在被传递给信号处理程序,而不是字符串表示。

    修复由 Adam DePue 贡献。

  • Celery 命令:扩展现在按名称排序。

  • 回归导致 :event:`task-failed` 事件与异常对象一起发送,而不是其字符串表示形式。

  • 工作进程守护进程会在守护进程捕获错误之前尝试创建 pid 文件,但该文件并未立即释放(问题 #923)。

  • 修复 Jython 兼容性。

  • billiard.forking_enable 被所有池调用,而不仅仅是进程池,如果没有安装台球 C 扩展,这将导致无用的警告。


3.0.6

发布日期
2012-08-17 11:00 下午 问庄严
  • 现在取决于kombu 2.4.0

  • 现在取决于台球 2.7.3.12

  • Redis:Celery 现在会在队列中没有消息时尝试恢复消息。

  • Crontab 计划现在正确尊重 :setting:`CELERY_TIMEZONE` 设置。

    重要的是要注意,除非设置了此设置,否则 Crontab 计划默认使用 UTC 时间。

    问题 #904 和 :pypi:`django-celery` #150。

  • billiard.enable_forking 现在仅由进程池设置。

  • celery report(问题#913)现在可以正确显示传输。

  • 如果最后一部分是模块名称,则 –app 参数现在可以工作(问题 #921)。

  • 修复了不可腌制异常的问题(台球 #12)。

  • task_name 属性添加到 EagerResult 始终为 None(问题 #907)。

  • celery.task 中的旧任务类默认不再接受魔法 kwargs(问题 #918)。

    很久以前的回归使这些魔法 kwargs 失效,而且由于没有人抱怨它,我们现在没有任何动力去修复它。

  • inspect reserved 控制命令无法正常工作。

  • 现在应该通过在 celerycelery.task 模块中明确指定动态创建的属性来更好地使用静态分析工具。

  • 终止任务现在会产生 RevokedTaskError 而不是 WorkerLostError

  • AsyncResult.revoke 现在接受 terminatesignal 参数。

  • :event:`task-revoked` 事件现在包含新字段:terminatedsignumexpired

  • TaskRevokedError 的论点现在是 revokedexpiredterminated 的原因之一。

  • 旧任务类不再将 classmethod 用于 push_requestpop_request(问题 #912)。

  • GroupResult 现在支持 children 属性(问题 #916)。

  • AsyncResult.collect 现在尊重 intermediate 参数(问题 #917)。

  • 修复了文档中的示例任务(问题 #902)。

  • Eventlet 已修复,以便尽快修补环境。

  • eventlet:现在警告是否在修补 eventlet 之前导入依赖于线程的 Celery 相关模块。

  • 监控指南中改进的事件和摄像头示例。

  • 如果无法加载命令,则禁用 celery 命令 setuptools 入口点。

  • 修复了任务指南中损坏的 dump_request 示例。


3.0.5

发布日期
2012-08-01 04:00 下午 BST
发布者
问庄严
  • 现在取决于kombu 2.3.1 +台球2.7.3.11

  • 修复了 -B 选项 (cannot pickle thread.lock objects) 的错误(问题 #894 + 问题 #892,+ :pypi:`django-celery` #154)。

  • :control:`restart_pool` 控制命令现在需要启用 :setting:`CELERYD_POOL_RESTARTS` 设置

    此更改是必要的,因为重新启动命令所依赖的多处理事件负责创建许多信号量/文件描述符,从而导致某些环境出现问题。

  • chain.apply 现在将参数传递给第一个任务(问题 #889)。

  • 在监视用户指南(问题 #396)中记录了 :pypi:`django-celery` 监视器以前的秘密选项。

  • 旧的变更日志现在被组织在每个系列的单独文档中,请参阅 历史


3.0.4

发布日期
2012-07-26 07:00 下午 BST
发布者
问庄严
  • 现在取决于 Kombu 2.3

  • 新的实验性独立 Celery 监视器:Flower

    请参阅 Flower: Real-time Celery web-monitor 以了解更多信息!

    由 Mher Movsisyan 提供。

  • 如果使用新的 pyamqp:// 传输,现在支持 AMQP 心跳。

    • :pypi:`amqp` 传输需要安装 :pypi:`amqp` 库:

      $ pip install amqp
    • 然后您需要将传输 URL 前缀设置为 pyamqp://

    • 默认心跳值为 10 秒,但可以使用 :setting:`BROKER_HEARTBEAT` 设置更改:

      BROKER_HEARTBEAT = 5.0
    • 如果 broker heartbeat 设置为 10 秒,则每 5 秒会监控一次心跳(心跳速率的两倍)。

    有关更多信息,请参阅 Kombu 2.3 更新日志

  • 现在支持 RabbitMQ 消费者取消通知,使用 pyamqp:// 传输。

    在集群中运行 RabbitMQ 时,这是必不可少的。

    有关更多信息,请参阅 Kombu 2.3 更新日志

  • 送货信息不再直接传递。

    发现 SQS 传输将无法腌制的对象添加到交付信息映射中,因此我们不得不再次返回使用白名单。

    修复这个错误也意味着 SQS 传输现在又可以工作了。

  • 当任务被撤销时,信号量没有正确释放(问题 #877)。

    这可能导致任务被吞下,直到工人重新启动才被释放。

    感谢 Hynek Schlawack 调试问题。

  • 现在重试任务也会转发任何链接的任务。

    这意味着如果任务是链的一部分(或以其他方式链接),并且即使重试该任务,重试成功时也会执行链中的下一个任务。

  • 和弦:现在支持为和弦解锁任务设置音程和其他关键字参数。

    • 现在可以将音程设置为和弦子任务 kwargs 的一部分:

      chord(header)(body, interval=10.0)
    • 此外,和弦解锁任务现在遵循 Task.default_retry_delay 选项,在没有指定时使用,这也意味着也可以使用注释更改默认间隔:

      CELERY_ANNOTATIONS = {
          'celery.chord_unlock': {
              'default_retry_delay': 10.0,
          }
      }


  • 新的 @add_defaults() 方法可以向应用程序配置添加新的默认配置字典。

    例如:

    config = {'FOO': 10}
    
    app.add_defaults(config)

    app.conf.update(config) 相同,只是数据不会被复制,并且在工作进程产生子进程时不会被酸洗。

    此外,该方法接受一个可调用对象:

    def initialize_config():
        # insert heavy stuff that can't be done at import time here.
    
    app.add_defaults(initialize_config)

    这意味着与上述相同,只是在实际使用 Celery 配置之前不会发生。

    例如,Celery 可以懒惰地使用 Flask 应用程序的配置:

    flask_app = Flask()
    app = Celery()
    app.add_defaults(lambda: flask_app.config)
  • 已撤销的任务未在结果后端标记为已撤销(问题 #871)。

    修复由 Hynek Schlawack 贡献。

  • 事件循环现在可以正确处理 epoll 轮询对象已关闭的情况(问题 #882)。

  • 修复了 funtests/test_leak.py 中的语法错误

    修复由 Catalin Iacob 贡献。

  • 组/块:现在接受空任务列表(问题 #873)。

  • 新方法名称:

    • Celery.default_connection()@connection_or_acquire()

    • Celery.default_producer()@producer_or_acquire()

    旧名称仍然适用于向后兼容性。


3.0.3

发布日期
2012-07-20 09:17 下午 BST
发布者
问庄严
  • :pypi:`amqplib` 将 channel 对象作为 delivery_info 的一部分传递,并且它不可pickle,所以我们现在将其删除。


3.0.2

发布日期
2012-07-20 04:00 下午 BST
发布者
问庄严
  • 一个错误导致以下任务选项不采用默认值

    配置(问题 #867 + 问题 #858)

  • 任务请求:delivery_info 现在按原样传递(问题 #807)。

  • ETA 参数现在支持带有时区设置的日期时间(问题 #855)。

  • 工作人员的横幅以错误的顺序显示自动缩放设置(问题 #859)。

  • 扩展命令现在在设置并发后加载,这样它们就不会干扰诸如 eventlet 补丁之类的事情。

  • 修复了线程池中的错误(问题 #863)

  • 任务失败处理程序混淆了 sys.exc_info() 中的字段。

    修复由 Rinat Shigapov 贡献。

  • 修复了文档中的拼写错误和措辞。

    修复由 Paul McMillan 贡献

  • 新设置::setting:`CELERY_WORKER_DIRECT`

    如果启用,每个工作人员将从他们自己的专用队列中消费,该队列可用于将任务路由到特定工作人员。

  • 修复了添加消费者远程控制命令中的几个边缘情况错误。

  • migrate:如果启用了 :setting:`CELERY_WORKER_DIRECT`,现在可以过滤和移动任务到特定的工人。

    在其他改进中,添加了以下功能:

    • move_direct(filterfun, **opts)

    • move_direct_by_id(task_id, worker_hostname, **opts)

    • move_direct_by_idmap({task_id: worker_hostname, ...}, **opts)

    • move_direct_by_taskmap({task_name: worker_hostname, ...}, **opts)


  • default_connection() 现在接受一个池参数,如果设置为 false 会导致创建一个新连接而不是从池中获取一个。

  • 新信号::signal:`celeryd_after_setup`

  • 默认加载器现在保留来自配置模块的小写属性。


3.0.1

发布日期
2012-07-10 06:00 下午 BST
发布者
问庄严
  • 现在取决于kombu 2.2.5

  • 检查现在支持限制参数:

    myapp.control.inspect(limit=1).ping()
  • Beat:现在与时区感知日期时间一起使用。

  • 继承 from celery import Task 的任务类错误地启用了 accept_magic_kwargs

  • 修复了 inspect scheduled 中的错误(问题 #829)。

  • Beat:现在重置计划以升级到 UTC。

  • celery worker 命令现在适用于 eventlet/gevent。

    以前它不会足够早地修补环境。

  • celery 命令现在支持使用 setuptools 入口点的扩展命令。

    库可以通过添加如下入口点向 celery 命令添加其他命令:

    setup(
        entry_points=[
            'celery.commands': [
                'foo = my.module:Command',
        ],
    ],
    ...)

    该命令必须支持 celery.bin.base.Command 的接口。

  • contrib.migrate:将任务从一个队列移动到另一个队列的新实用程序。

    • move_tasks()

    • move_task_by_id()


  • :event:`task-sent` 事件现在包含 exchangerouting_key 字段。

  • 修复了在 Python 3 上安装的错误。

    修复由 Jed Smith 贡献。


3.0.0 (Chiastic Slide)

发布日期
2012-07-07 01:30 下午 BST
发布者
问庄严

请参阅 Celery 3.0 中的新功能(Chiastic Slide)