Celery 2.3 的更改历史记录 — Python 文档
Celery 2.3 的更改历史记录
2.3.4
- 发布日期
- 2011-11-25 04:00 下午 格林威治标准时间
- 发布者
- 问庄严
安全修复
[安全性:CELERYSA-0001] 当
--uid
/--gid
参数为 celery multi, 时,守护进程将设置有效 ID 而不是真实 ID ]celeryd_detach、celery beat 和 celery 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。
此外,还添加了
celerybeat
和celeryev
的通用初始化脚本。
新闻
自动连接池支持。
该池由需要代理连接的所有内容使用,例如调用任务、发送广播命令、使用 AMQP 结果后端检索结果等。
该池默认是禁用的,但您可以通过配置 :setting:`BROKER_POOL_LIMIT` 设置来启用它:
BROKER_POOL_LIMIT = 10
限制为 10 意味着最多可以同时存在 10 个连接。 在单线程环境中只会使用一个连接,但在并发环境(线程、greenlets 等,但不是进程)中,当超过限制时,任何获取连接的尝试都将阻塞线程并等待连接被释放。 这是在选择限制时需要考虑的事情。
限制为
None
或0表示无限制,每次都会建立和关闭连接。介绍和弦(任务集回调)。
现在可以为单个任务设置时间限制。
要设置任务的软硬时间限制,请使用
time_limit
和soft_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]、
propagate
和interval
参数。with_default_connection
->with default_connection
TaskPool.apply_async:关键字参数
callbacks
和errbacks
已重命名为callback
和errback
,并采用单个标量值而不是列表。不再传播进程清理期间发生的错误(问题 #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
现在什么都不做。