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

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

Celery 2.3 的更改历史记录

2.3.4

发布日期
2011-11-25 04:00 下午 格林威治标准时间
发布者
问庄严

安全修复

  • [安全性:CELERYSA-0001] 当 --uid/--gid 参数为 celery multi, 时,守护进程将设置有效 ID 而不是真实 ID ]celeryd_detachcelery beatcelery events 被使用。

    这意味着权限没有被正确删除,以后有可能重新获得主管权限。


修复

  • #455 从 2.4 到 2.3 的反向移植修复。
  • StateDB 未在关闭时保存。
  • 修复工人有时在超过硬时间限制时挂起的问题。


2.3.3

发布日期
2011-16-09 05:00 下午 BST
发布者
莫夫西相
  • 如果替换对象没有定义 isatty()(问题 #477),猴子修补 sys.stdout 可能会导致工作程序崩溃。
  • /etc/default/celeryd 中的 CELERYD 选项不应与通用初始化脚本一起使用。


2.3.2

发布日期
2011-10-07 05:00 下午 BST
发布者
问庄严

新闻

  • 改进的贡献指南。

    如果您想为 Celery 做出贡献,您应该阅读 贡献 Gudie

    我们正在寻找各种技能水平的贡献者,所以不要犹豫!

  • 现在取决于 Kombu 1.3.1

  • Task.request 现在包含当前工作程序主机名(问题 #460)。

    可用作 task.request.hostname

  • 现在,应用程序子类可以更轻松地扩展它们的腌制方式。

    (见 celery.app.AppPickler)。


修复

  • purge/discard_all 工作不正常(问题 #455)。

  • 日志消息的着色不能很好地处理非 ASCII 数据(问题 #427)。

  • [Windows] 多处理池尝试导入 os.kill,即使这在那里不可用(问题 #450)。

  • 修复了由于任务超出硬时间限制而导致工作人员无响应的情况。

  • 事件参考中缺少 :event:`task-sent` 事件。

  • ResultSet.iterate 现在在完成时返回结果(问题 #459)。

    以前的情况并非如此,即使文档说明这是预期的行为。

  • 直接调用任务时将不再执行重试(使用 __call__)。

    相反,将重新引发传递给 retry 的异常。

  • 如果启用自动缩放,Eventlet 不再崩溃。

    仍然不支持扩大和缩小 eventlet 池。

  • py24 目标从 tox.ini 中移除。


2.3.1

发布日期
2011-08-07 08:00 下午 BST
发布者
问庄严

修复


2.3.0

发布日期
2011-08-05 12:00 下午 BST
测试
CPython:2.5、2.6、2.7; PyPy:1.5; Jython:2.5.2
发布者
问庄严

重要说明

  • 现在需要 Kombu 1.2.1

  • 现在默认禁用结果。

    AMQP 后端不是一个好的默认设置,因为用户通常不会使用结果,从而导致数千个队列。

    虽然队列可以配置为在未使用时过期,但默认情况下无法启用此功能,因为这仅在最近的 RabbitMQ 版本 (2.1.1+) 中可用

    有了这个变化,启用结果后端将是一个有意识的选择,这有望引导用户阅读文档并了解特定后端的任何常见陷阱。

    默认后端现在是一个虚拟后端 (celery.backends.base.DisabledBackend)。 保存状态只是一个空操作,AsyncResult.wait()、.result、.state 等。 将引发 NotImplementedError 告诉用户配置结果后端。

    如需帮助选择后端,请参阅 Result Backends

    如果您依赖于先前的默认值,即 AMQP 后端,那么您必须在升级之前明确设置它:

    CELERY_RESULT_BACKEND = 'amqp'

    笔记

    对于 :pypi:`django-celery` 用户,默认后端仍然是 database,默认情况下不会禁用结果。

  • Debian init-scripts 已被弃用,取而代之的是 generic-init.d init-scripts。

    此外,还添加了 celerybeatceleryev 的通用初始化脚本。


新闻

  • 自动连接池支持。

    该池由需要代理连接的所有内容使用,例如调用任务、发送广播命令、使用 AMQP 结果后端检索结果等。

    该池默认是禁用的,但您可以通过配置 :setting:`BROKER_POOL_LIMIT` 设置来启用它:

    BROKER_POOL_LIMIT = 10

    限制为 10 意味着最多可以同时存在 10 个连接。 在单线程环境中只会使用一个连接,但在并发环境(线程、greenlets 等,但不是进程)中,当超过限制时,任何获取连接的尝试都将阻塞线程并等待连接被释放。 这是在选择限制时需要考虑的事情。

    限制为None或0表示无限制,每次都会建立和关闭连接。

  • 介绍和弦(任务集回调)。

    和弦是仅在任务集中的所有任务执行完毕后才执行的任务。 这是从 中采用的“任务集回调”的一个奇特术语)。

    它适用于所有结果后端,但目前最好的实现是由 Redis 结果后端提供的。

    这是一个示例和弦:

    >>> chord(add.subtask((i, i))
    ...         for i in xrange(100))(tsum.subtask()).get()
    9900

    如果您想了解更多信息,请阅读用户指南 中的 和弦部分。

  • 现在可以为单个任务设置时间限制。

    要设置任务的软硬时间限制,请使用 time_limitsoft_time_limit 属性:

    import time
    
    @task(time_limit=60, soft_time_limit=30)
    def sleeptask(seconds):
        time.sleep(seconds)

    如果未设置属性,则将使用工作人员的默认时间限制。

    在此版本中,您还可以使用 time_limit() 远程控制命令在运行时更改任务的时间限制:

    >>> from celery.task import control
    >>> control.time_limit('tasks.sleeptask',
    ...                    soft=60, hard=120, reply=True)
    [{'worker1.example.com': {'ok': 'time limits set successfully'}}]

    只有在时间限制更改后开始执行的任务才会受到影响。

    笔记

    软时间限制在 Windows 或其他没有 SIGUSR1 信号的平台上仍然不起作用。

  • Redis 后端配置指令名称已更改为包括

    CELERY_ 前缀。

    旧设置名称

    用。。。来代替

    REDIS_HOST

    CELERY_REDIS_HOST

    REDIS_PORT

    CELERY_REDIS_PORT

    REDIS_DB

    CELERY_REDIS_DB

    REDIS_PASSWORD

    CELERY_REDIS_PASSWORD

    旧名称仍受支持,但待弃用。

  • PyPy:如果在 PyPy 1.5 上运行,则使用的默认池实现现在是多处理。

  • multi:现在支持“pass through”选项。

    通过选项可以更轻松地在没有配置文件的情况下使用 Celery,或者只需在命令行上添加最后一分钟的选项。

    使用示例:

    $ celery multi start 4  -c 2  -- broker.host=amqp.example.com \
                                     broker.vhost=/               \
                                     celery.disable_rate_limits=yes
  • celerybeat:现在重试建立连接(问题 #419)。

  • celeryctl:新增 list bindings 命令。

    根据使用的代理传输列出当前或所有可用的绑定。

  • 心跳现在每 30 秒发送一次(以前每 2 分钟发送一次)。

  • ResultSet.join_native()iter_native() 现在由 Redis 和缓存结果后端支持。

    这是 join() 的优化版本,使用底层后端一次获取多个结果的能力。

  • 现在可以通过启用 :setting:`EMAIL_USE_SSL` 设置在发送错误电子邮件时使用 SSL。

  • events.default_dispatcher():使用连接池轻松获取事件调度器实例的上下文管理器。

  • 配置模块中的导入错误将不再被忽略。

  • ResultSet.iterate:现在支持 [X37X]、propagateinterval 参数。

  • with_default_connection -> with default_connection

  • TaskPool.apply_async:关键字参数 callbackserrbacks 已重命名为 callbackerrback,并采用单个标量值而不是列表。

  • 不再传播进程清理期间发生的错误(问题 #365)

  • 添加了TaskSetResult.delete(),这将删除之前保存的任务集结果。

  • celerybeat 现在每 3 分钟同步一次,而不是仅在关机时同步(问题 #382)。

  • 监视器现在可以正确处理未知事件,因此会显示用户定义的事件。

  • 在 Windows 上终止任务现在也会终止所有任务子进程(问题 #384)。

  • worker: -I|--include 选项现在总是搜索当前目录以导入指定的模块。

  • Cassandra 后端:现在使用 TTL 使结果过期。

  • funtests 中的功能测试套件现在实际上工作正常,并通过了测试。


修复

  • celeryev 试图创建 pidfile 两次。
  • celery.contrib.batches:修复了任务静默失败的问题(问题 #393)。
  • 修复了记录对象会给出“
  • CELERY_TASK_ERROR_WHITE_LIST 现在已在所有加载器中正确初始化。
  • celeryd_detach 现在通过命令行配置。
  • 如果队列已经被消耗,远程控制命令 add_consumer 现在什么都不做。