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

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

Celery 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 版更改了我们眼皮底下的默认行为:(

    见:http://bit.ly/d5OwMr

    这意味着那些使用 :pypi:`django-picklefield`` 版本 >= 0.1.5 创建 Celery 表(通过 syncdbceleryinit)的人必须改变他们的表以允许结果字段手动为 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`(重用相同数据库连接的最大任务数)

    默认是为每个任务使用一个新连接。 我们非常希望重用连接,但是不知道重用的安全次数,而且我们没有任何方法来处理可能发生的错误,甚至可能依赖于数据库。

    参见:http://bit.ly/94fwdd

  • 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

    • 主管 (http://supervisord.org)

      额外的/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` 等工具将正确安装程序 celerydceleryinit ]。


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/celerydceleryd 初始化脚本定义附加选项。
  • 使用不同于 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 下午 中科院
发布者
问庄严

向后不兼容的更改

  • 将回溯添加到失败时的结果值。

    笔记

    如果使用数据库后端,则必须重新创建数据库表 celery_taskmeta。

    联系 邮件列表IRC 频道以获得帮助。

  • 现在只有在使用数据库后端时才会创建数据库表,所以如果你在某个时候改回数据库后端,一定要初始化表 (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:解决方法

    http://bugs.python.org/issue4607

  • 您现在可以自定义在工作启动、进程初始化等时发生的事情,

    通过创建自己的加载器(参见 celery.loaders.defaultcelery.loaders.djangoappcelery.loaders)。

  • 支持多个 AMQP 交换和队列。

    此功能缺少文档和测试,因此鼓励任何感兴趣的人改进这种情况。

  • 工作人员现在可以在 AMQP 服务器重新启动后幸存下来!

    如果 AMQP 代理连接丢失,则自动重新建立它。

    新设置:

    • AMQP_CONNECTION_RETRY

      设置为 True 以启用连接重试。

    • AMQP_CONNECTION_MAX_RETRIES。

      放弃前的最大重启次数。 默认值:100。



新闻

  • *; 修复 python-daemon 和 multiprocessing 之间的不兼容性,
    这导致了 [Errno 10] 分离时没有子进程 问题。
  • *; 修复了保存腌制时可能引发的 DjangoUnicodeDecodeError
    将数据发送到 Django 的 Memcached 缓存后端。
  • 更好的 Windows 兼容性。
  • *; 新版腌制田(取自
    http://www.djangosnippets.org/snippets/513/)
  • *; 引入了新信号:task_sent、task_prerun和
    task_postrun,更多信息见celery.signals
  • *; 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` 时返回回溯
    :state:`RETRY`
  • 记录的默认任务参数。
  • 为 ExceptionInfo 添加一个合理的 __repr__ 以便于调试
  • *; 修复文档错字 .. 导入地图 -> .. 导入地图 .
    感谢 :github_user:`mikedizon`


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