Celery 1.0 的更改历史记录 — Python 文档
Celery 1.0 的更改历史记录
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8.0
- 0.6.0
- 0.4.1
- 0.4.0
- 0.3.20
- 0.3.7
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.0
- 0.2.0-pre3
- 0.2.0-pre2
- 0.2.0-pre1
- 0.1.15
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.0
1.0.6
- 发布日期
- 2010-06-30 09:57 上午 中科院
- 发布者
- 问庄严
RabbitMQ 1.8.0 扩展了它们的交换等效性测试,包括 auto_delete 和 durable。 这破坏了 AMQP 后端。
如果您已经使用过 AMQP 后端,这意味着您必须删除之前的定义:
$ camqadm exchange.delete celeryresults
或:
$ python manage.py camqadm exchange.delete celeryresults
1.0.5
- 发布日期
- 2010-06-01 02:36 下午 中科院
- 发布者
- 问庄严
关键
:sig:`INT`/Control-c 杀死池,突然终止当前正在执行的任务。
通过使池工作进程忽略
SIGINT
来修复。在池终止之前不应关闭消费者,只需取消消费者即可。
见问题#122。
现在取决于 :pypi:`billiard` >= 0.3.1
worker:以前由 worker 组件引发的异常可能会停止启动,现在它可以正确记录异常并关闭。
工人:预取计数设置得太晚了。 现在尽可能早地设置 QoS,因此 worker: 不能在启动时吞下所有消息。
变化
celery.contrib.abortable
:可中止的任务。定义执行步骤的任务,然后可以在每个步骤完成后中止任务。
EventDispatcher
:如果事件被禁用,则不再创建 AMQP 通道在 [bdist_rpm] 部分下添加了所需的 RPM 包名称,以支持使用
setup.py
从源构建 RPM。运行单元测试:
NOSE_VERBOSE
环境变量现在启用 Nose 的详细输出。celery.execute.apply()
:将日志文件/日志级别参数作为任务 kwargs 传递。请参阅问题 #110。
celery.execute.apply:应该返回异常,而不是在错误时返回
ExceptionInfo
。请参阅问题 #111。
在 FAQs 中添加了新条目:
我应该使用重试还是 acks_late?
我可以按名称调用任务吗?
1.0.4
- 发布日期
- 2010-05-31 09:54 上午 中科院
- 发布者
- 问庄严
- 变更日志与 1.0.5 合并,因为从未宣布发布。
1.0.3
- 发布日期
- 2010-05-15 03:00 下午 中科院
- 发布者
- 问庄严
重要说明
现在消息在 执行任务函数之前被确认 。
这是我们一直想要的行为,但由于 multiprocessing 模块的限制而无法实现。 之前的行为并不好,而且随着 1.0.1 的发布情况变得更糟,所以这个变化肯定会提高可靠性、性能和操作。
更多信息请看http://bit.ly/9hom6T
数据库结果后端:结果现在明确地将 null=True 设置为 django-picklefield 0.1.5 版更改了我们眼皮底下的默认行为:(
这意味着那些使用 :pypi:`django-picklefield`` 版本 >= 0.1.5 创建 Celery 表(通过
syncdb
或celeryinit
)的人必须改变他们的表以允许结果字段手动为 NULL。MySQL:
ALTER TABLE celery_taskmeta MODIFY result TEXT NULL
PostgreSQL:
ALTER TABLE celery_taskmeta ALTER COLUMN result DROP NOT NULL
删除了 Task.rate_limit_queue_type,因为它不是很有用,并且使重构某些部分变得更加困难。
现在取决于胡萝卜 >= 0.10.4
现在取决于台球 >= 0.3.0
新闻
AMQP 后端:为 result.get() / result.wait() 添加了超时支持。
新任务选项:Task.acks_late(默认::setting:`CELERY_ACKS_LATE`)
延迟确认意味着任务消息将在 任务执行后 被确认,而不是 就在 之前,这是默认行为。
笔记
这意味着如果 worker 在执行过程中崩溃,任务可能会被执行两次。 对于大多数应用程序不可接受,但对其他人来说是可取的。
向周期性任务添加了类似 Crontab 的调度。
与 cronjob 一样,您可以指定希望任务执行的时间单位。 虽然不是 cron 功能的完整实现,但它应该提供相当程度的通用调度需求。
您可以指定一分钟 (0-59)、一小时 (0-23) 和/或一周中的某一天(0-6,其中 0 是星期日,或按名称:
sun, mon, tue, wed, thu, fri, sat
)。例子:
from celery.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hour=7, minute=30)) def every_morning(): print('Runs every morning at 7:30a.m') @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week='mon')) def every_monday_morning(): print('Run every monday morning at 7:30a.m') @periodic_task(run_every=crontab(minutes=30)) def every_hour(): print('Runs every hour on the clock (e.g., 1:30, 2:30, 3:30 etc.).')
笔记
这是一个迟到的补充。 虽然我们有单元测试,但由于此功能的性质,我们无法在实践中完全测试它,因此请考虑此实验。
TaskPool.apply_async:现在支持 accept_callback 参数。
apply_async:如果任务 args 不是列表,或者 kwargs 不是元组(问题 #95),现在会引发
ValueError
。Task.max_retries 现在可以是 None,这意味着它将永远重试。
celerybeat
:现在在发布大量任务时重用相同的连接。修改文档中的任务锁定示例以使用 cache.add 进行原子锁定。
添加了对任务的 started 状态的实验支持。
如果 Task.track_started 启用,当任务被工作人员执行时,任务将报告其状态为“已启动”。
默认值为 False,因为正常行为是不报告该粒度级别。 任务要么是挂起的,要么是已完成的,要么是等待重试。 当有长时间运行的任务并且需要报告当前正在运行的任务时,具有“已启动”状态可能很有用。
全局默认值可以被 :setting:`CELERY_TRACK_STARTED` 设置覆盖。
用户指南:新部分 提示和最佳实践 。
欢迎投稿!
遥控指令
远程控制命令现在可以将回复发送回呼叫者。
现有命令已改进为发送回复,celery.task.control 中的客户端界面具有新的关键字参数:reply、timeout 和 limit 。 其中,reply 表示等待回复,timeout 是停止等待回复的时间(以秒为单位),limit 是获取的最大回复数。
默认情况下,它将等待尽可能多的回复一秒钟。
rate_limit(task_name,目的地=全部,回复=假,超时=1,限制=0)
成功返回 {'ok': message},失败返回 {'failure': message}。
>>> from celery.task.control import rate_limit >>> rate_limit('tasks.add', '10/s', reply=True) [{'worker1': {'ok': 'new rate limit set successfully'}}, {'worker2': {'ok': 'new rate limit set successfully'}}]
ping(目的地=全部,回复=假,超时=1,限制=0)
Worker 返回简单的消息 “pong”。
>>> from celery.task.control import ping >>> ping(reply=True) [{'worker1': 'pong'}, {'worker2': 'pong'},
撤销(目的地=全部,回复=假,超时=1,限制=0)
Worker 只返回 True。
>>> from celery.task.control import revoke >>> revoke('419e46eb-cf6a-4271-86a8-442b7124132c', reply=True) [{'worker1': True}, {'worker2'; True}]
您现在可以添加自己的远程控制命令!
远程控制命令是在命令注册表中注册的功能。 注册命令是使用
celery.worker.control.Panel.register()
完成的:from celery.task.control import Panel @Panel.register def reset_broker_connection(state, **kwargs): state.consumer.reset_connection() return {'ok': 'connection re-established'}
在工作器中导入此模块后,您可以使用 celery.task.control.broadcast 启动命令:
>>> from celery.task.control import broadcast >>> broadcast('reset_broker_connection', reply=True) [{'worker1': {'ok': 'connection re-established'}, {'worker2': {'ok': 'connection re-established'}}]
TIP 您可以使用 destination 参数选择要接收命令的工人:
>>> broadcast('reset_broker_connection', destination=['worker1']) [{'worker1': {'ok': 'connection re-established'}]
新增遥控指令:dump_reserved
转储由工人保留的任务,等待执行:
>>> from celery.task.control import broadcast >>> broadcast('dump_reserved', reply=True) [{'myworker1': [<TaskRequest ....>]}]
新的远程控制命令:dump_schedule
转储当前注册的 ETA 时间表的工人。 这些是带有 eta[X31X](或 countdown)参数的任务等待工作人员执行。
>>> from celery.task.control import broadcast >>> broadcast('dump_schedule', reply=True) [{'w1': []}, {'w3': []}, {'w2': ['0. 2010-05-12 11:06:00 pri0 <TaskRequest {name:'opalfeeds.tasks.refresh_feed_slice', id:'95b45760-4e73-4ce8-8eac-f100aa80273a', args:'(<Feeds freq_max:3600 freq_min:60 start:2184.0 stop:3276.0>,)', kwargs:'{'page': 2}'}>']}, {'w4': ['0. 2010-05-12 11:00:00 pri0 <TaskRequest {name:'opalfeeds.tasks.refresh_feed_slice', id:'c053480b-58fb-422f-ae68-8d30a464edfe', args:'(<Feeds freq_max:3600 freq_min:60 start:1092.0 stop:2184.0>,)', kwargs:'{\'page\': 1}'}>', '1. 2010-05-12 11:12:00 pri0 <TaskRequest {name:'opalfeeds.tasks.refresh_feed_slice', id:'ab8bc59e-6cf8-44b8-88d0-f1af57789758', args:'(<Feeds freq_max:3600 freq_min:60 start:3276.0 stop:4365>,)', kwargs:'{\'page\': 3}'}>']}]
修复
中介线程不再阻塞超过 1 秒。
启用速率限制并且当有很多剩余时间时,中介线程可能会阻止关闭(并可能阻止其他作业进入)。
未正确应用远程速率限制(问题 #98)。
现在可以在 TaskRequest.on_failure 中正确处理带有 Unicode 消息的异常。
数据库后端:TaskMeta.result:默认值应为 None 非空字符串。
1.0.2
- 发布日期
- 2010-03-31 12:50 下午 英语考试
- 发布者
- 问庄严
弃用::setting:`CELERY_BACKEND`,请改用 :setting:`CELERY_RESULT_BACKEND`。
我们现在在任务中使用自定义记录器。 此记录器支持格式中的任务魔术关键字参数。
任务的默认格式 (:setting:`CELERYD_TASK_LOG_FORMAT`) 现在包括任务的 id 和名称,因此可以轻松跟踪任务日志消息的来源。
- 示例输出::
- [2010-03-25 13:11:20,317: INFO/PoolWorker-1]
[tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] 来自 add
要恢复到以前的行为,您可以设置:
CELERYD_TASK_LOG_FORMAT = """ [%(asctime)s: %(levelname)s/%(processName)s] %(message)s """.strip()
单元测试:不要禁用 django 测试数据库拆卸,而是修复由修改 DATABASE_NAME 设置(问题 #82)引起的潜在问题。
Django Loader: New config :setting:`CELERY_DB_REUSE_MAX`(重用相同数据库连接的最大任务数)
默认是为每个任务使用一个新连接。 我们非常希望重用连接,但是不知道重用的安全次数,而且我们没有任何方法来处理可能发生的错误,甚至可能依赖于数据库。
worker:worker 组件现在可配置::setting:`CELERYD_POOL`、:setting:`CELERYD_CONSUMER`、:setting:`CELERYD_MEDIATOR` 和 [ X166X]:设置:`CELERYD_ETA_SCHEDULER`。
默认配置如下:
CELERYD_POOL = 'celery.concurrency.processes.TaskPool' CELERYD_MEDIATOR = 'celery.worker.controllers.Mediator' CELERYD_ETA_SCHEDULER = 'celery.worker.controllers.ScheduleController' CELERYD_CONSUMER = 'celery.worker.consumer.Consumer'
:setting:`CELERYD_POOL` 设置使得用线程池或扭曲/事件池替换多处理池变得容易?
考虑第一个池插件的竞争开始了!
Debian 初始化脚本:使用 -一种不是 && (问题#82)。
Debian init-scripts:现在总是保留 /etc/default/celeryd 和 /etc/default/celerybeat 中的 $CELERYD_OPTS。
celery.beat.Scheduler:修复了如果计划未正确初始化,则计划未正确刷新到磁盘的错误。
celerybeat
:现在在接收到 :sig:`SIGTERM` 和 :sig:`SIGINT` 信号时将计划同步到磁盘。控制命令:确保关键字参数不是 Unicode。
ETA 调度程序:缺少记录器对象,因此调度程序在尝试记录任务已被撤销时崩溃。
management.commands.camqadm
:修正错字 camqpadm -> camqadm(问题 #83)。PeriodicTask.delta_resolution:几天和几小时都没有工作,现在通过四舍五入到最接近的天/小时来修复。
修复了 BaseAsyncResult.__eq__ 中潜在的无限循环,尽管没有证据表明它曾经被触发过。
worker:现在通过确认并发出错误消息来处理有编码问题的消息。
1.0.1
- 发布日期
- 2010-02-24 07:05 下午 英语考试
- 发布者
- 问庄严
任务现在被提前而不是迟到。
这样做是因为消息只能在同一个连接通道内被确认,所以如果连接丢失,我们将不得不再次重新获取消息以确认它。
这可能会或可能不会影响您,但大多数执行时间非常长的正在运行的任务会受到影响,因为所有进入池的任务都需要在工作人员可以安全终止之前执行(这最多是池工作者的数量,乘以 :setting:`CELERYD_PREFETCH_MULTIPLIER` 设置)。
默认情况下,我们将预取计数相乘以提高执行时间短的任务突发时的性能。 如果这不适用于您的用例,您应该能够将预取乘数设置为零,而不会牺牲性能。
笔记
multiprocessing
的补丁目前正在开发中,该补丁将使我们能够使用更好的解决方案,并计划包含在 2.0.0 版本中。现在,当收到 :sig:`SIGTERM` 信号时,worker 会干净利落地关闭。
如果收到 :sig:`SIGINT` 信号(Control-c),worker 现在会冷关机,这意味着它会尝试尽快终止。
结果缓存现在转移到基后端类,因此无需在基类中实现此功能。
缓存现在也有大小限制,因此它们的内存使用不会失控。
您可以使用 :setting:`CELERY_MAX_CACHED_RESULTS` 设置来设置缓存可以容纳的最大结果数(默认为五千个结果)。 此外,您可以使用 backend.reload_task_result + backend.reload_taskset_result 重新获取已经检索到的结果(这适用于那些想要增量发送结果的人)。
工人现在再次在 Windows 上工作。
警告
如果您在 Django 中使用 Celery,则不能使用 project.settings 作为设置模块名称,但以下应该有效:
$ python manage.py celeryd --settings=settings
执行:.messaging.TaskPublisher.send_task 现在整合了之前 apply_async 的所有功能。
就像将倒计时转换为 ETA 一样,因此
celery.execute.apply_async()
现在只是一个方便的前端celery.messaging.TaskPublisher.send_task()
,使用任务类默认选项。还引入了
celery.execute.send_task()
,它可以仅使用任务名称来应用任务(如果客户端在其任务注册表中没有目标任务,则很有用)。示例:
>>> from celery.execute import send_task >>> result = send_task('celery.ping', args=[], kwargs={}) >>> result.get() 'pong'
camqadm:这是一个用于命令行访问 AMQP API 的新实用程序。
非常适合删除队列/绑定/交换、实验和测试:
$ camqadm 1> help
给出一个交互式 shell,输入 help 以获取命令列表。
使用 Django 时,请改用管理命令:
$ python manage.py camqadm 1> help
Redis 结果后端:为了符合最近的 Redis API 更改,已弃用以下设置:
REDIS_TIMEOUT
REDIS_CONNECT_RETRY
如果使用,这些将发出 DeprecationWarning。
添加了 REDIS_PASSWORD 设置,因此您可以在 Redis 中使用新的简单身份验证机制。
redis 结果后端在断开连接时不再调用 SAVE,因为这显然由 Redis 本身更好地处理。
如果 settings.DEBUG 开启,worker 现在会警告它可能导致的内存泄漏。
ETA 调度程序现在在迭代之间最多休眠两秒。
ETA 调度程序现在会删除它可能遇到的任何已撤销的任务。
由于撤销还不是持久的,这样做是为了确保任务被撤销,例如,它目前被搁置,因为它的 ETA 是未来一周。
task_id 参数现在即使在急切地执行任务(使用 apply 或 :setting:`CELERY_ALWAYS_EAGER`)时也会受到尊重。
如果连接被重置,内部队列现在被清除。
新的魔法关键字参数:delivery_info。
由 retry() 使用以使用相同的 exchange/routing_key 将任务重新发送到其原始目的地。
事件:.send() 没有传递字段(修复了 celerymon 中的 UUID 键错误)
向工作线程添加了 –schedule/-s 选项,因此在使用嵌入式
celerybeat
服务器(- B/–beat) 选项。更好的 Python 2.4 兼容性。 测试套件现在通过了。
任务装饰器:现在将文档字符串保留为 cls.__doc__,(之前复制到 cls.run.__doc__)
testproj 目录已重命名为 tests,我们现在使用 nose + django-nose 进行测试发现,以及 ]unittest2 用于测试用例。
requirements
中提供了新的 pip 需求文件。TaskPublisher:声明现在完成一次(每个进程)。
添加了 Task.delivery_mode 和 :setting:`CELERY_DEFAULT_DELIVERY_MODE` 设置。
这些可用于标记非持久性消息(即,如果代理重新启动,它们就会丢失)。
现在有了我们自己的 ImproperlyConfigured 异常,而不是使用 Django 异常。
Debian init-scripts 的改进:如果程序不可执行则显示错误。 将 django 与 virtualenv 一起使用时,不修改 CELERYD。
1.0.0
- 发布日期
- 2010-02-10 04:00 下午 英语考试
- 发布者
- 问庄严
向后不兼容的更改
Celery 不再支持分离,所以你必须使用你平台上可用的工具,或者像 :pypi:`supervisor` 之类的东西来制作
celeryd
/celerybeat
/celerymon
进入后台进程。我们在 worker 守护进程中遇到了太多问题,因此决定必须将其删除。 示例启动脚本已添加到 extra/ 目录中:
Debian, Ubuntu, (start-stop-daemon)
额外/debian/init.d/celeryd 额外/debian/init.d/celerybeat
macOS 启动
额外/mac/org.celeryq.celeryd.plist 额外/mac/org.celeryq.celerybeat.plist 额外/mac/org.celeryq.celerymon.plist
-
额外的/supervisord/supervisord.conf
除了 –detach,以下程序参数已被删除:–uid, –gid, –workdir, –chroot, –pidfile, –umask。 所有好的守护程序都应该支持等效的功能,所以不用担心。
还删除了以下配置键:CELERYD_PID_FILE、CELERYBEAT_PID_FILE、CELERYMON_PID_FILE。
默认工作日志级别现在是 WARN,要启用以前的日志级别,请使用 –loglevel=INFO 启动工作程序。
任务会自动注册。
这意味着您不再需要手动注册您的任务。 您不必立即更改旧代码,因为一个任务是否注册两次并不重要。
如果你不希望你的任务被自动注册,你可以设置 abstract 属性
class MyTask(Task): abstract = True
通过使用 abstract 只会自动注册此任务的子类任务(这类似于 Django ORM)。
如果您也不想注册子类,可以将 autoregister 属性设置为 False。
顺便说一句,此更改还修复了自动名称分配和相对导入的问题。 因此,如果您使用相对导入,您也不必再指定任务名称。
您不能再将常规函数用作任务。
添加此更改是因为它使内部结构更加干净和简单。 但是,您现在可以使用 @task 装饰器将函数转换为任务:
from celery.decorators import task @task() def add(x, y): return x + y
也可以看看
Tasks 有关任务装饰器的更多信息。
周期性任务系统已被重写为集中式解决方案。
这意味着默认情况下 worker 不再调度周期性任务,但引入了一个新的守护进程:celerybeat。
要启动周期性任务调度程序,您必须运行
celerybeat
:$ celerybeat
确保它只在一台服务器上运行,如果你运行它两次,所有周期性任务也将被执行两次。
如果你只有一台工作服务器,你可以像这样将它嵌入到工作服务器中:
$ celeryd --beat # Embed celerybeat in celeryd.
主管已被撤职。
这意味着不再支持 celeryd 的 -S 和 –监督 选项。 请改用 http://supervisord.org 之类的内容。
TaskSet.join 已被移除,使用 TaskSetResult.join 代替。
任务状态 “完成” 已重命名为 “成功”。
AsyncResult.is_done 已被移除,请改用 AsyncResult.successful。
如果设置了 Task.ignore_result,worker 不再存储错误,以恢复到之前的行为集 :setting:`CELERY_STORE_ERRORS_EVEN_IF_IGNORED` 到 True。
统计功能已被移除以支持事件,因此 -S 和 –statistics` 开关已被移除。
模块 celery.task.strategy 已被移除。
celery.discovery 已被移除,它的
autodiscover
功能现在在 celery.loaders.djangoapp 中。 原因:内部 API。CELERY_LOADER
环境变量现在除了模块名之外还需要加载器类名,例如,你之前有:“celery.loaders.default”,你现在需要 “celery.loaders.default.Loader”,使用之前的语法会导致一个 [ X172X]弃用警告。
检测加载器现在是惰性的,因此在导入 celery.loaders 时没有完成。
为了实现这一点,celery.loaders.settings 已重命名为 load_settings,现在是一个返回设置对象的函数。 celery.loaders.current_loader 现在也是一个函数,返回当前加载器。
所以:
loader = current_loader
需要改为:
loader = current_loader()
弃用
以下配置变量已重命名,并将在 v2.0 中弃用:
CELERYD_DAEMON_LOG_FORMAT
->CELERYD_LOG_FORMAT
CELERYD_DAEMON_LOG_LEVEL
->CELERYD_LOG_LEVEL
CELERY_AMQP_CONNECTION_TIMEOUT
->CELERY_BROKER_CONNECTION_TIMEOUT
CELERY_AMQP_CONNECTION_RETRY
->CELERY_BROKER_CONNECTION_RETRY
CELERY_AMQP_CONNECTION_MAX_RETRIES
->CELERY_BROKER_CONNECTION_MAX_RETRIES
SEND_CELERY_TASK_ERROR_EMAILS
->CELERY_SEND_TASK_ERROR_EMAILS
celery.conf 中的公共 API 名称也已更改为一致的命名方案。
我们现在支持从任意数量的队列中消费。
为此,我们必须重命名配置语法。 如果您使用任何自定义 AMQP 路由选项(queue/exchange/routing_key 等),您应该阅读新的 FAQ 条目:我可以只将某些任务发送到某些服务器吗?。
先前的语法已弃用并计划在 v2.0 中删除。
TaskSet.run 已重命名为 TaskSet.apply_async。
TaskSet.run 现已弃用,并计划在 v2.0 中移除。
新闻
速率限制支持(每个任务类型,或全局)。
新的周期性任务系统。
自动注册。
新的酷任务装饰器语法。
worker:现在发送事件,如果启用 -E 参数。
非常适合监控工具,一个已经在制作中(https://github.com/celery/celerymon)。
当前事件包括::event:`worker-heartbeat`、task-[接收/成功/失败/重试]、:event:`worker-online`、:事件:`工人离线`。
您现在可以删除(撤销)已应用的任务。
您现在可以使用 –hostname 参数设置工作人员识别的主机名。
缓存后端现在遵循 :setting:`CELERY_TASK_RESULT_EXPIRES` 设置。
消息格式已经标准化,现在使用 ISO-8601 格式表示日期而不是日期时间。
worker 现在通过重新启动来响应 :sig:`SIGHUP` 信号。
现在按时钟安排定期任务。
也就是说, timedelta(hours=1) 表示每小时 :00 分钟,而不是从服务器开始的每一小时。 要恢复到以前的行为,您可以设置 PeriodicTask.relative = True。
现在支持将执行选项传递给 args 的 TaskSets 列表。
示例:
>>> ts = TaskSet(add, [([2, 2], {}, {'countdown': 1}), ... ([4, 4], {}, {'countdown': 2}), ... ([8, 8], {}, {'countdown': 3})]) >>> ts.run()
通过将预取计数设置为并发数的四倍,获得了 3 倍的性能提升(从 0.1 秒到 0.03 秒的平均任务往返时间!)。
添加了一个新设置::setting:`CELERYD_PREFETCH_MULTIPLIER`,默认设置为 4。
改进了对 webhook 任务的支持。
celery.task.rest 现已弃用,取而代之的是新的闪亮的 celery.task.http。 使用更多的反射名称、合理的接口,并且可以覆盖用于执行 HTTP 请求的方法。
任务集的结果现在通过将其存储在结果后端中来缓存。
变化
现在取决于 :pypi:`carrot` >= 0.8.1
新依赖项::pypi:`billiard`、:pypi:`python-dateutil`、:pypi:`django-picklefield`。
不再依赖于 python-daemon
uuid 发行版在运行 Python 2.4 时作为依赖项添加。
现在通过将其保存在
CELERY_LOADER
环境变量中来记住先前检测到的加载程序。这可能对使用 fork 仿真的 Windows 有所帮助。
ETA 不再发送日期时间对象,而是在字符串中使用 ISO 8601 日期格式以更好地与其他平台兼容。
不再为重试任务发送错误邮件。
任务现在可以覆盖用于存储结果的后端。
重构了 ExecuteWrapper,apply 和 :setting:`CELERY_ALWAYS_EAGER` 现在也执行任务回调和信号。
现在为带有 ETA 的任务使用适当的调度程序。
这意味着等待的 ETA 任务按时间排序,因此我们不必一直轮询整个列表。
现在还导入 :setting:`CELERY_IMPORTS` 中列出的模块,当与 django 一起运行时(如文档所述)。
stdout/stderr 的日志级别从 INFO 更改为 ERROR
自动发现任务时,现在可以正确传播导入错误。
您现在可以使用 celery.messaging.establish_connection 建立与代理的连接。
当作为单独的服务运行时,周期性任务调度程序会采取一些聪明的措施来不定期轮询。
如果您需要更快的轮询时间,您可以降低 :setting:`CELERYBEAT_MAX_LOOP_INTERVAL` 的值。
您现在可以在运行时更改周期性任务间隔,方法是将 run_every 设为一个属性,或子类化 PeriodicTask.is_due。
工作人员现在支持通过使用广播队列启用的控制命令,您可以远程撤销任务或设置任务类型的速率限制。 参见
celery.task.control
。如果安装了 :pypi:`setproctitle` 模块,这些服务现在会设置信息性进程名称(如 ps 列表中所示)。
@NotRegistered
现在继承自KeyError
,并且 TaskRegistry.__getitem__`+`pop 引发 NotRegistered您可以通过
CELERY_LOADER
环境变量设置加载器。您现在可以设置 :setting:`CELERY_IGNORE_RESULT` 默认忽略任务结果(如果启用,任务不会将结果或错误保存到使用的后端)。
工作人员现在通过丢弃和确认消息来正确处理格式错误的消息,而不是崩溃。
错误
- 修复了在数据库中存储任务结果时可能发生的竞争条件。
文档
- 参考现在分为两部分; API 参考和内部模块参考。
0.8.4
- 发布日期
- 2010-02-05 01:52 下午 中科院
- 发布者
- 问庄严
- 如果使用 –detach 参数,现在会发出警告。 –detach 不应再使用,因为它有几个与之相关的不易修复的错误。 相反,使用类似 start-stop-daemon、:pypi:`supervisor` 或 launchd (macOS) 的东西。
- 确保记录器类是进程感知的,即使运行 Python >= 2.6。
- 重试任务时不再发送错误电子邮件。
0.8.3
- 发布日期
- 2009-12-22 09:43 上午 中科院
- 发布者
- 问庄严
- 修复了使用数据库后端存储/查询任务结果时可能发生的竞争条件。
- 现在
setup.py
文件中有控制台脚本入口点,因此 :pypi:`zc.buildout` 等工具将正确安装程序celeryd
和celeryinit
]。
0.8.2
- 发布日期
- 2009-11-20 03:40 下午 中科院
- 发布者
- 问庄严
- QOS 预取计数没有正确应用,因为它是为收到的每条消息设置的(显然行为类似于“再接收一个”),而不是仅在我们想要的值更改时设置。
0.8.1
- 发布日期
- 2009-11-16 05:21 下午 中科院
- 发布者
- 问庄严
非常重要的注意事项
此版本(带有胡萝卜 0.8.0)启用了 AMQP QoS(服务质量),这意味着工作人员一次只会收到它可以处理的尽可能多的消息。 与任何版本一样,您应该在将其投入生产之前在您的开发服务器上测试此版本升级!
重要变化
如果您使用 Python < 2.6 并且使用多处理向后移植,则需要多处理版本 2.6.2.1。
所有 AMQP_* 设置都已重命名为 BROKER_*,此外 AMQP_SERVER 已重命名为 BROKER_HOST,因此在您之前:
AMQP_SERVER = 'localhost' AMQP_PORT = 5678 AMQP_USER = 'myuser' AMQP_PASSWORD = 'mypassword' AMQP_VHOST = 'celery'
您需要将其更改为:
BROKER_HOST = 'localhost' BROKER_PORT = 5678 BROKER_USER = 'myuser' BROKER_PASSWORD = 'mypassword' BROKER_VHOST = 'celery'
自定义胡萝卜后端现在需要包含后端类名,所以在您之前:
CARROT_BACKEND = 'mycustom.backend.module'
您需要将其更改为:
CARROT_BACKEND = 'mycustom.backend.module.Backend'
其中 Backend 是类名。 这可能是 “后端”,因为这是之前隐含的名称。
胡萝卜的新版本要求:0.8.0
变化
- 合并了修复 processName 错误的多处理 backport 补丁。
- 默认忽略 PeriodicTask 的结果。
- 添加了 Redis 结果存储后端
- 允许
/etc/default/celeryd
为celeryd
初始化脚本定义附加选项。 - 使用不同于 UTC 固定时间的 MongoDB 定期任务问题。
- Windows 特定:否定测试可用
os.fork
(感谢 :github_user:`miracle2k`)。 - 现在尝试处理损坏的 PID 文件。
- 向 contrib 添加了一个 Django 测试运行程序,它设置 CELERY_ALWAYS_EAGER = True 以使用数据库后端进行测试。
- 添加了 :setting:`CELERY_CACHE_BACKEND` 设置以使用除 Django 全局缓存后端之外的其他内容。
- 使用
functools.partial
的自定义实现来支持 Python 2.4(在 2.4 上运行可能仍然存在问题,但最终会得到支持) - 为所有后端保存 :state:`RETRY` 状态时准备泡菜异常。
- SQLite 无并发限制仅在使用数据库后端时才有效。
0.8.0
- 发布日期
- 2009-09-22 03:06 下午 中科院
- 发布者
- 问庄严
向后不兼容的更改
将回溯添加到失败时的结果值。
现在只有在使用数据库后端时才会创建数据库表,所以如果你在某个时候改回数据库后端,一定要初始化表 (django: syncdb, python: celeryinit ])。
笔记
这仅适用于使用 Django 1.1 或更高版本的情况。
现在依赖于 carrot 0.6.0 版。
现在依赖于 python-daemon 1.4.8
重要变化
Celery 现在可以在纯 Python 中使用(在 Django 项目之外)。
这意味着 Celery 不再是 Django 特有的。
有关更多信息,请参阅常见问题条目 Celery 仅适用于 Django 吗?。
Celery 现在支持任务重试。
有关详细信息,请参阅 重试 。
我们现在有一个 AMQP 结果存储后端。
它使用消息来发布任务返回值和状态。 而且速度非常快!
有关更多信息,请参阅问题 #6!
实施的 AMQP QoS(预取计数):
这不会收到超出我们处理能力的消息。
现在在分离时将 stdout/stderr 重定向到工作日志文件
- 现在使用 inspect.getargspec 只传递默认参数
任务支持。
- 添加 Task.on_success、.on_retry、.on_failure 处理程序
- 见
celery.task.base.Task.on_success()
, celery.task.base.Task.on_retry()
、celery.task.base.Task.on_failure()
、
- 见
- celery.utils.gen_unique_id:解决方法
- 您现在可以自定义在工作启动、进程初始化等时发生的事情,
通过创建自己的加载器(参见
celery.loaders.default
、celery.loaders.djangoapp
、celery.loaders
)。
支持多个 AMQP 交换和队列。
此功能缺少文档和测试,因此鼓励任何感兴趣的人改进这种情况。
工作人员现在可以在 AMQP 服务器重新启动后幸存下来!
如果 AMQP 代理连接丢失,则自动重新建立它。
新设置:
- AMQP_CONNECTION_RETRY
设置为 True 以启用连接重试。
- AMQP_CONNECTION_MAX_RETRIES。
放弃前的最大重启次数。 默认值:100。
新闻
- *; 修复 python-daemon 和 multiprocessing 之间的不兼容性,
- 这导致了 [Errno 10] 分离时没有子进程 问题。
- *; 修复了保存腌制时可能引发的 DjangoUnicodeDecodeError
- 将数据发送到 Django 的 Memcached 缓存后端。
- 更好的 Windows 兼容性。
- *; 新版腌制田(取自
- *; 引入了新信号:task_sent、task_prerun和
- task_postrun,更多信息见
celery.signals
。
- task_postrun,更多信息见
- *; TaskSetResult.join 在 timeout=None 时导致 TypeError。
- 谢谢耶日·科泽拉。 关闭 #31
- *; views.apply 应该返回 HttpResponse 实例。
- 感谢 Jerzy Kozera。 关闭 #32
- *; PeriodicTask:保存 run_every 从 int 的转换
- 到 timedelta 到类属性而不是实例上。
- *; 异常已移至 celery.exceptions,但仍然存在
- 在上一个模块中可用。
- *; 如果发生错误,尝试回滚事务并重试保存结果
- 在使用数据库后端设置任务状态时。
- jail() 重构为
celery.execute.ExecuteWrapper
。 - views.apply 现在可以正确地将 mime-type 设置为“application/json”
- views.task_status 现在如果 state 是 :state:`RETRY` 会返回异常
- *; views.task_status 现在在状态为 :state:`FAILURE` 时返回回溯
- 记录的默认任务参数。
- 为 ExceptionInfo 添加一个合理的 __repr__ 以便于调试
- *; 修复文档错字 .. 导入地图 -> .. 导入地图 .
0.6.0
- 发布日期
- 2009-08-07 06:54 上午 英语考试
- 发布者
- 问庄严
重要变化
- *; 修复了引发不可选择异常的任务导致池崩溃的错误
- 工人。 因此,如果您有池工作人员神秘消失,或工作人员停止工作的问题,此版本已修复。
- 修复了周期性任务的竞争条件。
- *; 任务池现在受到监督,因此如果池工作者崩溃,
- 消失或停止响应,它会自动替换为新的。
- Task.name 现在由类模块+名称自动生成,例如 “djangotwitter.tasks.UpdateStatusesTask”。 很方便。 不知道为什么我们以前不这样做。 某些文档已更新为不手动指定任务名称。
新闻
- 用 Django 1.1 测试
- 新教程:使用 Carrot 和 Celery 创建点击计数器
- *; 现在在工作人员处创建周期性任务的数据库条目
- 启动而不是每次检查(这在代码中已经被遗忘了很长时间的TODO/XXX)
- *; 新设置变量::setting:`CELERY_TASK_RESULT_EXPIRES`
- 删除存储的任务结果后的时间(以秒为单位,或 datetime.timedelta 对象)。 目前这只适用于数据库后端。
- *; 工作人员现在发出调试日志消息,其中定期任务
- 已经推出。
- *; 周期任务表现在被锁定以供读取时获取
- 周期性任务状态(目前只有 MySQL,为其他引擎寻找补丁)
- *; 现在可以通过打开
- DEBUG 日志级别 (–loglevel=DEBUG)。
- 带有超时参数的函数/方法现在可以正常工作。
- *; 新:celery.strategy.even_time_distribution:
- 使用迭代器产生任务参数,kwargs 元组,在整个可用时间窗口内均匀分布其任务的处理。
- 日志消息 未知任务被忽略... 现在有日志级别 错误
- *; 现在为所有任务发出接收任务时的日志消息,即使
- 任务有一个 ETA(预计到达时间)。 此外,日志消息现在包括任务的预计到达时间(如果有)。
- *; 确认现在发生在池回调中。 无法完成工作
- 目标,因为它不可pickle(不能共享AMQP 连接等)。
- 在 README 中添加了关于 .delay 挂起的注释
- 测试现在通过 Django 1.1
- 修复发现以确保应用程序在 INSTALLED_APPS 中
- *; 以前覆盖的池行为(进程收割,等到池工作者
- 可用等)现在由 multiprocessing.Pool 本身处理。
- 将统计数据转换为 Unicode 以用作 kwargs。 谢谢露西!
0.4.1
- 发布日期
- 2009-07-02 01:42 下午 英语考试
- 发布者
- 问庄严
- 修复了解析消息选项的错误(mandatory、routing_key、priority、immediate)
0.4.0
- 发布日期
- 2009-07-01 07:29 下午 英语考试
- 发布者
- 问庄严
- 添加急切执行。 celery.execute.apply`|`Task.apply 执行函数阻塞直到任务完成,为了 API 兼容性,它返回一个 celery.result.EagerResult 实例。 您可以通过将 :setting:`CELERY_ALWAYS_EAGER` 设置为 True 来配置 Celery 始终在本地运行任务。
- 现在取决于 anyjson。
- 99% coverage 使用 Python coverage 3.0。
0.3.20
- 发布日期
- 2009-06-25 08:42 下午 英语考试
- 发布者
- 问庄严
apply_async(delay_task的高级版本)、countdown和eta[X115X]的新参数;
>>> # Run 10 seconds into the future. >>> res = apply_async(MyTask, countdown=10);
>>> # Run 1 day from now >>> res = apply_async(MyTask, ... eta=datetime.now() + timedelta(days=1))
现在取消链接陈旧的 PID 文件
还有很多测试。
现在与胡萝卜 >= 0.5.0 兼容。
重要事项 TaskSetResult 实例上的 subtask_ids 属性已被删除。 要获取此信息,请使用:
>>> subtask_ids = [subtask.id for subtask in ts_res.subtasks]
Taskset.run() 现在尊重来自任务类的额外消息选项。
任务:添加属性ignore_result:不存储状态和返回值。 这意味着您不能使用 celery.result.AsyncResult 来检查任务是否完成,或获取其返回值。 仅当您需要性能并且可以在没有这些功能的情况下使用时才使用。 任何引发的异常都会像往常一样存储返回值/状态。
任务:添加属性 disable_error_emails 以禁用为该任务发送错误电子邮件。
现在应该可以在 Windows 上运行(尽管在后台运行不起作用,因此使用 –detach 参数会导致引发异常)。
添加了对用于分析和监控的统计数据的支持。 要开始发送统计信息,请使用以下命令启动工作程序 – 统计选项。 然后过了一会儿,您可以通过运行`python manage.py celerystats 转储结果 . 有关更多信息,请参阅 celery.monitoring。
Celery 守护进程现在可以被监督(即,如果它崩溃,它会自动重新启动)。 要使用此启动工作程序,请使用 –supervised` 选项(或 -S)。
views.apply:查看调用任务。
示例:
http://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=b
警告
谨慎使用! 在没有首先确保您的代码安全的情况下,不要将此 URL 公开给公众!
重构 celery.task。 现在分为三个模块:
celery.task
包含 apply_async、delay_task、discard_all 和任务快捷方式,以及从 celery.task.base 和 celery 导入对象。 task.builtins
celery.task.base
包含任务基类:Task、PeriodicTask、TaskSet、AsynchronousMapTask、ExecuteRemoteTask。
celery.task.builtins
内置任务:PingTask、DeleteExpiredTaskMetaTask。
0.3.7
- 发布日期
- 2008-06-16 11:41 下午 英语考试
- 发布者
- 问庄严
IMPORTANT 现在使用 AMQP 的 basic.consume 而不是 basic.get。 这意味着我们不再轮询代理以获取新消息。
IMPORTANT 默认并发限制现在设置为系统上可用的 CPU 数量。
重要的 任务注册: Renamed 任务名称 argument to 姓名, so:
>>> tasks.register(func, task_name='mytask')
必须替换为:
>>> tasks.register(func, name='mytask')
如果 pidfile 陈旧,守护程序现在可以正确运行。
现在与胡萝卜 0.4.5 兼容
默认 AMQP 连接超时现在是 4 秒。
AsyncResult.read() 总是返回 True。
如果文件存在,则仅将 README 用作 long_description,以便 easy_install 不会中断。
celery.view:JSON 响应现在可以正确设置其 MIME 类型。
apply_async 现在有一个 connection 关键字参数,因此如果您想执行多个任务,您可以重复使用相同的 AMQP 连接。
在 task_status 视图中处理失败,这样它就不会抛出 500s。
修复了 AMQP_HOST 文档中的错字 AMQP_SERVER。
发送给管理员的工作人员例外电子邮件现在可以正常工作。
不再依赖于 django,所以安装 celery 不会影响安装的首选 Django 版本。
现在通过注册 PickledObject 字段再次使用 PostgreSQL (:pypi:`psycopg2`)。
Worker:添加了 –detach 选项作为 –daemon 的别名,从现在起文档中使用该术语。
确保池和定期任务工作线程在退出时正确终止(因此 Control-c 再次工作)。
现在依赖于 python-daemon。
删除了对 simplejson 的依赖
缓存后端:如果 Django 缓存后端为 :pypi:`python-memcached`/:pypi:`libmemcached`,则为每个任务进程重新建立连接。
Tyrant Backend:现在为每个执行的任务重新建立连接。
0.3.3
- 发布日期
- 2009-06-08 01:07 下午 英语考试
- 发布者
- 问庄严
- PeriodicWorkController 现在在检查要执行的周期性任务之间休眠 1 秒。
0.3.2
- 发布日期
- 2009-06-08 01:07 下午 英语考试
- 发布者
- 问庄严
- worker:添加选项 –discard:丢弃(删除!)队列中的所有等待消息。
- 工人:–wakeup-after 选项没有作为浮动处理。
0.3.1
- 发布日期
- 2009-06-08 01:07 下午 英语考试
- 发布者
- 问庄严
- PeriodicTask 工作线程现在在自己的线程中运行,而不是阻塞 TaskController 循环。
- 默认 QUEUE_WAKEUP_AFTER 已降低至 0.1(原为 0.3)
0.3.0
- 发布日期
- 2009-06-08 12:41 下午 英语考试
- 发布者
- 问庄严
警告
这是一个开发版本,对于稳定版本,请参阅版本 0.2.x。
非常重要: Pickle 现在是用于序列化任务参数的编码器,因此请务必在升级前刷新任务队列。
IMPORTANT TaskSet.run() 现在返回一个
celery.result.TaskSetResult
实例,它允许您检查任务集的状态和返回值,因为它是单个实体。重要 芹菜现在依赖于胡萝卜 >= 0.4.1。
Celery 守护进程现在将任务错误发送到注册的管理员电子邮件。 要关闭此功能,请在 settings.py 中将 SEND_CELERY_TASK_ERROR_EMAILS 设置为 False。 感谢 Grégoire Cachet。
您现在可以使用 manage.py 运行 Celery 守护进程:
$ python manage.py celeryd
感谢 Grégoire Cachet。
添加了对消息优先级、主题交换、任务的自定义路由键的支持。 这意味着我们引入了 celery.task.apply_async,这是一种新的任务执行方式。
你可以像往常一样使用 celery.task.delay 和 celery.Task.delay,但如果你想更好地控制发送的消息,你需要 celery.task.apply_async 和 celery.Task.apply_async。
这也意味着 AMQP 配置已更改。 一些设置已重命名,而另一些则是新设置:
CELERY_AMQP_EXCHANGE
CELERY_AMQP_PUBLISHER_ROUTING_KEY
CELERY_AMQP_CONSUMER_ROUTING_KEY
CELERY_AMQP_CONSUMER_QUEUE
CELERY_AMQP_EXCHANGE_TYPE
有关详细信息,请参阅 常见问题解答 中的条目 我可以仅将某些任务发送到某些服务器吗?。
现在使用日志级别 ERROR 而不是 INFO 记录任务错误,并转储堆栈跟踪。 感谢 Grégoire Cachet。
让每个新的工作进程重新建立它的 Django DB 连接,这解决了“MySQL 连接死了?” 例外。 感谢 Vitaly Babiy 和 Jirka Vejrazka。
重要 现在使用pickle 来编码任务参数。 这意味着您现在可以将复杂的 Python 对象作为参数传递给任务。
删除了对 yadayada 的依赖。
添加了常见问题解答,请参阅 docs/faq.rst。
现在将任务 kwargs 中的任何 Unicode 键转换为常规字符串。 谢谢维塔利宝贝。
将 TaskDaemon 重命名为 WorkController。
celery.datastructures.TaskProcessQueue 现在更名为 celery.pool.TaskPool。
池算法已经过重构以提高性能和稳定性。
0.2.0
- 发布日期
- 2009-05-20 05:14 下午 英语考试
- 发布者
- 问庄严
- 0.2.0 的最终版本
- 与胡萝卜版本 0.4.0 兼容。
- 修复了一些与从数据库后端获取结果相关的语法错误。
0.2.0-pre3
- 发布日期
- 2009-05-20 05:14 下午 英语考试
- 发布者
- 问庄严
- 内部发布。 改进了对不可选择异常的处理,get_result 现在尝试重新创建看起来像原始异常的东西。
0.2.0-pre2
- 发布日期
- 2009-05-20 01:56 下午 英语考试
- 发布者
- 问庄严
- 现在处理无法处理的异常(例如 django.core.exception.MultipleObjectsReturned 的动态生成的子类)。
0.2.0-pre1
- 发布日期
- 2009-05-20 12:33 下午 英语考试
- 发布者
- 问庄严
- 它变得相当稳定,有很多新功能,所以将版本升级到 0.2。 这是一个预发布。
- celery.task.mark_as_read() 和 celery.task.mark_as_failure() 已被删除。 改用 celery.backends.default_backend.mark_as_read() 和 celery.backends.default_backend.mark_as_failure()。
0.1.15
- 发布日期
- 2009-05-19 04:13 下午 英语考试
- 发布者
- 问庄严
- Celery 守护进程泄漏 AMQP 连接,这应该已修复,如果您有任何打开文件过多的问题(例如 rabbit.log 中的 emfile 错误,请联系我们!
0.1.14
- 发布日期
- 2009-05-19 01:08 下午 英语考试
- 发布者
- 问庄严
- 修复了 TaskSet 类中的语法错误(没有这样的变量 TimeOutError)。
0.1.13
- 发布日期
- 2009-05-19 12:36 下午 英语考试
- 发布者
- 问庄严
忘记添加 yadayada 来安装需求了。
现在删除所有过期的任务结果,而不仅仅是那些标记为完成的。
无需django配置即可加载Tokyo Tyrant后端类,可以直接在类构造函数中指定tyrant设置。
改进的 API 文档
现在使用 Sphinx 文档系统,您可以通过执行以下操作来构建 html 文档:
$ cd docs $ make html
结果将在 docs/_build/html 中。
0.1.12
- 发布日期
- 2009-05-18 04:38 下午 英语考试
- 发布者
- 问庄严
delay_task() 等 现在返回 celery.task.AsyncResult 对象,它可以让你检查结果和可能发生的任何失败。 它有点像 multiprocessing.Pool.map_async 返回的 multiprocessing.AsyncResult 类。
添加了
dmap()
和dmap_async()
。 这类似于 multiprocessing.Pool 版本,但它们是分发到 Celery 服务器的任务。 示例:>>> from celery.task import dmap >>> import operator >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> [4, 8, 16] >>> from celery.task import dmap_async >>> import operator >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> result.ready() False >>> time.sleep(1) >>> result.ready() True >>> result.result [4, 8, 16]
重构了任务元数据缓存和数据库后端,并为东京暴君添加了一个新的后端。 您可以在 django 设置文件中设置后端。
示例:
CELERY_RESULT_BACKEND = 'database'; # Uses the database CELERY_RESULT_BACKEND = 'cache'; # Uses the django cache framework CELERY_RESULT_BACKEND = 'tyrant'; # Uses Tokyo Tyrant TT_HOST = 'localhost'; # Hostname for the Tokyo Tyrant server. TT_PORT = 6657; # Port of the Tokyo Tyrant server.
0.1.11
- 发布日期
- 2009-05-12 02:08 下午 英语考试
- 发布者
- 问庄严
- 日志系统正在泄漏文件描述符,导致服务器因 EMFILES(打开文件太多)错误(已修复)而停止。
0.1.10
- 发布日期
- 2009-05-11 12:46 下午 英语考试
- 发布者
- 问庄严
- 任务现在支持位置参数和关键字参数。
- 需要胡萝卜 0.3.8。
- 如果连接丢失,守护程序现在会尝试重新连接。
0.1.8
- 发布日期
- 2009-05-07 12:27 下午 英语考试
- 发布者
- 问庄严
- 更好的测试覆盖率
- 更多文档
- 如果 settings.CELERYD_EMPTY_MSG_EMIT_EVERY 为 0,worker 不会发出 Queue is empty 消息。
0.1.7
- 发布日期
- 2009-04-30 01:50 下午 英语考试
- 发布者
- 问庄严
- 添加了一些单元测试
- 现在可以将数据库用于任务元数据(例如任务是否已执行)。 设置 settings.CELERY_TASK_META
- 现在可以运行 python setup.py test 从 tests 项目中运行单元测试。
- 可以使用 settings.CELERY_AMQP_EXCHANGE、settings.CELERY_AMQP_ROUTING_KEY 和 settings.CELERY_AMQP_CONSUMER_6X] 设置 AMQP 交换/路由密钥/队列
0.1.6
- 发布日期
- 2009-04-28 02:13 下午 英语考试
- 发布者
- 问庄严
介绍 任务集 。 执行了一组子任务,您可以找出完成了多少个子任务,或者是否完成了所有子任务(非常适合进度条等)
现在在运行 Task.__call__ 时捕获所有异常,所以守护进程不会死。 这不会发生在纯函数中,只有 Task 类。
autodiscover() 现在适用于压缩鸡蛋。
Worker:为方便起见,现在将当前工作目录添加到 sys.path。
PeriodicTask 类的 run_every 属性现在可以是 datetime.timedelta() 对象。
工人:您现在可以为工人设置 DJANGO_PROJECT_DIR 变量,它会将其添加到 sys.path 以便于启动。
现在可以通过 HTTP 检查任务是否已执行。
您可以通过将 Celery urls.py 包含到您的项目中来做到这一点,
>>> url(r'^celery/$', include('celery.urls'))
然后访问以下网址:
http://mysite/celery/$task_id/done/
这将返回一个 JSON 字典,例如:
{"task": {"id": "TASK_ID", "executed": true}}
delay_task 现在返回字符串 id,而不是 uuid.UUID 实例。
现在有 PeriodicTasks,具有类似 cron 的功能。
项目名称从 crunchy 更改为 celery。 名称更改请求的详细信息在 docs/name_change_request.txt 中。
0.1.0
- 发布日期
- 2009-04-24 11:28 上午 英语考试
- 发布者
- 问庄严
- 初始版本
Sphinx 开始从 _static 中删除图像,因此我们需要将它们添加到实际内容中以确保它们被包含:-(
../_images/celery-banner.png ../_images/celery-banner-small.png