Celery 2.4 的更改历史记录 — Python 文档
Celery 2.4 的更改历史记录
2.4.5
- 发布日期
- 2011-12-02 05:00 下午 格林威治标准时间
- 发布者
- 问庄严
周期性任务间隔计划被意外舍入,导致一些周期性任务提前执行。
节拍日志中人性化时间的记录现在更加详细。
文档入门部分中的新 后端和代理 部分
这取代了旧的“其他队列”教程,并添加了 MongoDB、Beanstalk 和 CouchDB 的文档。
2.4.4
- 发布日期
- 2011-11-25 04:00 下午 格林威治标准时间
- 发布者
- 问庄严
安全修复
[安全性:CELERYSA-0001] 当
--uid
/--gid
参数为 celery multi, 时,守护进程将设置有效 ID 而不是真实 ID ]celeryd_detach、celery beat 和 celery events 被使用。这意味着权限没有被正确删除,以后有可能重新获得主管权限。
修复
进程池:修复了关机时罕见的死锁(问题 #523)。
修复由 Ionel Marys Christian 贡献。
Webhook 任务发出错误的 HTTP POST 标头(问题 #515)。
Content-Type 标头已从
application/json
⇒application/x-www-form-urlencoded
更改,并添加了适当的 Content-Length 标头。修复由 Mitar 贡献。
Daemonization 教程:添加一起使用 Django 和 virtualenv 的配置示例(Issue #505)。
胡安·伊格纳西奥·卡塔拉诺供稿。
通用 init-scripts 现在会自动创建日志和 pid 文件目录(问题 #545)。
克里斯·斯特里特供稿。
2.4.3
- 发布日期
- 2011-11-22 06:00 下午 格林威治标准时间
- 发布者
- 问庄严
修复了 celeryctl 中的模块导入错误(问题 #538)。
修复由 Chris Streeter 贡献。
2.4.2
- 发布日期
- 2011-11-14 12:00 下午 格林威治标准时间
- 发布者
- 问庄严
- 程序模块不再使用相对导入,因此可以执行
python -m celery.bin.name
。
2.4.1
- 发布日期
- 2011-11-07 06:00 下午 格林威治标准时间
- 发布者
- 问庄严
celeryctl inspect
命令缺少输出。- 进程池:减少轮询间隔以减少空闲 CPU 使用率。
- 进程池:MaybeEncodingError 未包含在 ExceptionInfo 中(问题 #524)。
- worker:将消除任务使用者启动后发生的错误。
- 日志记录:修复了无法写入标准输出重定向日志消息中的 unicode 的错误(问题 #522)。
2.4.0
- 发布日期
- 2011-11-04 04:00 下午 格林威治标准时间
- 发布者
- 问庄严
重要说明
现在支持 Python 3。
修复了工作进程处理中的死锁(问题 #496)。
产生新的子进程后可能会发生死锁,因为在 fork 之后日志库的互斥锁没有正确重置。
此错误影响的症状是工作人员只是停止处理任务,因为没有工作人员子进程正在运行。
maxtasksperchild
或启用时间限制时发生此错误的可能性更大。这是 http://bugs.python.org/issue6721#msg140215 的解决方法。
请注意,虽然这修复了日志库锁,但仍有可能在父进程中初始化其他锁,由自定义代码引入。
修复由 Harm Verhagen 贡献。
AMQP 结果后端:现在默认使结果过期。
现在默认过期值取自 :setting:`CELERY_TASK_RESULT_EXPIRES` 设置。
旧的 :setting:`CELERY_AMQP_TASK_RESULT_EXPIRES` 设置已被弃用,并将在 4.0 版中删除。
请注意,这意味着结果后端需要 RabbitMQ 2.1.0 或更高版本,并且如果您使用旧版本运行,则必须禁用过期。 您可以通过禁用 :setting:`CELERY_TASK_RESULT_EXPIRES` 设置来实现:
CELERY_TASK_RESULT_EXPIRES = None
Eventlet:修复了关机问题(问题 #457)。
现在可以使用 URL 指定代理传输
现在可以将代理指定为 URL。 此 URL 必须具有以下格式:
transport://user:password@hostname:port/virtual_host
例如,默认代理写为:
amqp://guest:guest@localhost:5672//
该方案是必需的,以便将主机标识为 URL 而不仅仅是主机名。 用户、密码、端口和 virtual_host 是可选的,默认为特定的传输默认值。
笔记
请注意,路径组件 (virtual_host) 始终以正斜杠开头。 这是区分虚拟主机
(空)和
'/'
所必需的,它们都是可接受的虚拟主机名。'/'
的虚拟主机变成:amqp://guest:guest@localhost:5672//
(空)的虚拟主机变为:
amqp://guest:guest@localhost:5672/
所以路径组件中的前导斜杠是 总是需要的 。
此外,:setting:`BROKER_URL` 设置已添加为
BROKER_HOST
的别名。 URL 和配置中指定的任何代理设置都将被忽略,如果 URL 中未提供设置,则配置中的值将用作默认值。此外,程序现在支持 [X31X] 选项以在命令行上指定代理 URL:
$ celery worker -b redis://localhost $ celery inspect -b amqp://guest:guest@localhost//e
环境变量
CELERY_BROKER_URL
也可用于轻松覆盖使用的默认代理。已弃用的
celery.loaders.setup_loader()
函数已被删除。:setting:`CELERY_TASK_ERROR_WHITELIST` 设置已被更灵活的方法取代(问题 #447)。
错误邮件发送逻辑现在可以作为
Task.ErrorMail
使用,在celery.utils.mail
中有实现(供参考)。可以对错误邮件类进行子分类,以完全控制发送错误消息的时间,从而无需单独的白名单设置。
:setting:`CELERY_TASK_ERROR_WHITELIST` 设置已被弃用,并将在 4.0 版中完全删除。
额外的弃用
以下功能已被弃用,并计划在 4.0 版中删除:
旧功能
选择
celery.loaders.current_loader
celery.current_app.loader
celery.loaders.load_settings
celery.current_app.conf
celery.execute.apply
任务申请
celery.execute.apply_async
Task.apply_async
celery.execute.delay_task
celery.execute.send_task
以下设置已被弃用,并计划在 4.0 版中删除:
旧环境
选择
CELERYD_LOG_LEVEL
celery worker --loglevel=
CELERYD_LOG_FILE
celery worker --logfile=
CELERYBEAT_LOG_LEVEL
celery beat --loglevel=
CELERYBEAT_LOG_FILE
celery beat --logfile=
CELERYMON_LOG_LEVEL
celerymon --loglevel=
CELERYMON_LOG_FILE
celerymon --logfile=
新闻
不再依赖于 :pypi:`pyparsing`。
现在取决于 Kombu 1.4.3。
CELERY_IMPORTS 现在可以是标量值(问题 #485)。
忘记在元组的唯一元素后添加逗号太容易了,这往往会影响新人。
文档可能应该在示例中使用列表,因为为此使用元组甚至没有意义。 尽管如此,有很多使用元组的教程,这种变化应该对新用户有所帮助。
修复了使用线程池时的内存泄漏(问题 #486)。
由 Kornelijus Survila 提供。
statedb
没有在退出时保存。现在已修复此问题,当启用
--statedb
时,它应该再次记住以前撤销的任务。添加 :setting:`EMAIL_USE_TLS` 以启用安全 SMTP 连接(问题 #418)。
由 Stefan Kjartansson 提供。
现在处理任务消息中缺失的字段,如消息格式文档中所述。
缺少必填字段抛出
@InvalidTaskError
缺少 args/kwargs 被假定为空。
克里斯·张伯林供稿。
修复了
celery.events.state
(celerymon
/celeryev
) 中的竞争条件,其中在迭代时会删除任务信息(问题 #501)。Cache、Cassandra、MongoDB、Redis 和 Tyrant 后端现在遵循 :setting:`CELERY_RESULT_SERIALIZER` 设置(问题 #435)。
这意味着目前只有数据库 (Django/SQLAlchemy) 后端不支持使用自定义序列化程序。
史蒂夫·莫林供稿
日志调用不再手动格式化消息,而是将其委托给日志系统,因此 Sentry 等工具可以更轻松地处理消息(问题 #445)。
由克里斯·亚当斯提供。
multi
现在支持stop_verify
命令等待进程关闭。如果缓存键是 unicode,则缓存后端不起作用(问题 #504)。
由 Neil Chintomby 贡献的修复。
新设置 :setting:`CELERY_RESULT_DB_SHORT_LIVED_SESSIONS` 添加,如果启用将禁用 SQLAlchemy 会话的缓存(问题 #449)。
由利奥·狄拉克提供。
所有结果后端现在都实现
__reduce__
以便它们可以被腌制(问题 #441)。Remy Noel 贡献的修复
multi 在 Windows 上不起作用(问题 #472)。
新式
CELERY_REDIS_*
设置现在优先于旧的REDIS_*
配置键(问题 #508)。修复由约书亚金斯伯格贡献
通用节拍初始化脚本不再设置 bash -e(问题 #510)。
修复由 Roger Hu 提供。
记录了和弦在 2.2 之前的 redis-server 版本中不能很好地工作。
由丹·麦吉贡献。
:setting:`CELERYBEAT_MAX_LOOP_INTERVAL` 设置没有得到遵守。
inspect.registered_tasks
重命名为inspect.registered
以保持命名一致性。以前的名称仍可用作别名。
供稿人:Mher Movsisyan
Worker 在没有安全保护的情况下记录了 args 和 kwargs 的字符串表示(问题 #480)。
RHEL init-script:更改了工作程序启动优先级。
MySQL 在 RHEL 上的默认启动/停止优先级是:
# chkconfig: - 64 36
因此,如果 Celery 使用数据库作为代理/消息存储,则应在数据库启动并运行后启动,否则会出现错误。 此提交将 init-script 中的优先级更改为:
# chkconfig: - 85 15
这是 3-rd 方应用程序的默认推荐设置,并确保 Celery 将在数据库服务之后启动并在其终止之前关闭。
由尤里 V 提供。 扎伊采夫。
KeyValueStoreBackend.get_many 不尊重
timeout
参数(问题 #512)。在尝试配置之后,beat/events 的
--workdir
选项没有 chdir(2)(问题 #506)。在弃用 2.4 支持后,我们现在可以正确命名模块,因为我们可以使用绝对导入。
因此,以下内部模块已重命名:
celery.concurrency.evlet
->celery.concurrency.eventlet
celery.concurrency.evg
->celery.concurrency.gevent
AUTHORS
文件现在按字母顺序排序。此外,您可能已经注意到,更改日志中现在提到了新功能/修复的贡献者。