This document describes the current stable version of Celery (3.1). For development docs, go here.

Celery Deprecation Timeline

Removals for version 3.2

  • Module celery.task.trace has been renamed to celery.app.trace as the celery.task package is being phased out. The compat module will be removed in version 3.2 so please change any import from:

    from celery.task.trace import …
    

    to:

    from celery.app.trace import …
    
  • AsyncResult.serializable() and celery.result.from_serializable will be removed.

    Use instead:

    >>> tup = result.as_tuple()
    >>> from celery.result import result_from_tuple
    >>> result = result_from_tuple(tup)
    

Removals for version 4.0

Old Task API

Compat Task Modules

  • Module celery.decorators will be removed:

    Which means you need to change:

    from celery.decorators import task
    

Into:

from celery import task
  • Module celery.task may be removed (not decided)

    This means you should change:

    from celery.task import task
    

    into:

    from celery import task
    

    —and::

    from celery.task import Task

    into:

    from celery import Task
    

Note that the new Task class no longer uses classmethods for these methods:

  • delay
  • apply_async
  • retry
  • apply
  • AsyncResult
  • subtask

This also means that you can’t call these methods directly on the class, but have to instantiate the task first:

>>> MyTask.delay()          # NO LONGER WORKS


>>> MyTask().delay()        # WORKS!

TaskSet

TaskSet has been renamed to group and TaskSet will be removed in version 4.0.

Old:

>>> from celery.task import TaskSet

>>> TaskSet(add.subtask((i, i)) for i in xrange(10)).apply_async()

New:

>>> from celery import group
>>> group(add.s(i, i) for i in xrange(10))()

Magic keyword arguments

The magic keyword arguments accepted by tasks will be removed in 4.0, so you should start rewriting any tasks using the celery.decorators module and depending on keyword arguments being passed to the task, for example:

from celery.decorators import task

@task()
def add(x, y, task_id=None):
    print("My task id is %r" % (task_id, ))

should be rewritten into:

from celery import task

@task(bind=True)
def add(self, x, y):
    print("My task id is {0.request.id}".format(self))

Task attributes

The task attributes:

  • queue
  • exchange
  • exchange_type
  • routing_key
  • delivery_mode
  • priority

is deprecated and must be set by CELERY_ROUTES instead.

celery.result

  • BaseAsyncResult -> AsyncResult.
  • TaskSetResult -> GroupResult.
  • TaskSetResult.total -> len(GroupResult)
  • TaskSetResult.taskset_id -> GroupResult.id

Apply to: AsyncResult, EagerResult:

- ``Result.wait()`` -> ``Result.get()``
  • Result.task_id() -> Result.id
  • Result.status -> Result.state.

celery.loader

  • current_loader() -> current_app.loader
  • load_settings() -> current_app.conf

Task_sent signal

The task_sent signal will be removed in version 4.0. Please use the before_task_publish and after_task_publush signals instead.

Modules to Remove

Settings

BROKER Settings

Setting name Replace with
BROKER_HOST BROKER_URL
BROKER_PORT BROKER_URL
BROKER_USER BROKER_URL
BROKER_PASSWORD BROKER_URL
BROKER_VHOST BROKER_URL

REDIS Result Backend Settings

Setting name Replace with
CELERY_REDIS_HOST CELERY_RESULT_BACKEND
CELERY_REDIS_PORT CELERY_RESULT_BACKEND
CELERY_REDIS_DB CELERY_RESULT_BACKEND
CELERY_REDIS_PASSWORD CELERY_RESULT_BACKEND
REDIS_HOST CELERY_RESULT_BACKEND
REDIS_PORT CELERY_RESULT_BACKEND
REDIS_DB CELERY_RESULT_BACKEND
REDIS_PASSWORD CELERY_RESULT_BACKEND

Logging Settings

Setting name Replace with
CELERYD_LOG_LEVEL --loglevel
CELERYD_LOG_FILE --logfile`
CELERYBEAT_LOG_LEVEL --loglevel
CELERYBEAT_LOG_FILE --loglevel`
CELERYMON_LOG_LEVEL --loglevel
CELERYMON_LOG_FILE --loglevel`

Other Settings

Setting name Replace with
CELERY_TASK_ERROR_WITELIST Annotate Task.ErrorMail
CELERY_AMQP_TASK_RESULT_EXPIRES CELERY_TASK_RESULT_EXPIRES

Removals for version 2.0

  • The following settings will be removed:
Setting name Replace with
CELERY_AMQP_CONSUMER_QUEUES CELERY_QUEUES
CELERY_AMQP_CONSUMER_QUEUES CELERY_QUEUES
CELERY_AMQP_EXCHANGE CELERY_DEFAULT_EXCHANGE
CELERY_AMQP_EXCHANGE_TYPE CELERY_DEFAULT_AMQP_EXCHANGE_TYPE
CELERY_AMQP_CONSUMER_ROUTING_KEY CELERY_QUEUES
CELERY_AMQP_PUBLISHER_ROUTING_KEY CELERY_DEFAULT_ROUTING_KEY
  • CELERY_LOADER definitions without class name.

    E.g. celery.loaders.default, needs to include the class name: celery.loaders.default.Loader.

  • TaskSet.run(). Use celery.task.base.TaskSet.apply_async()

    instead.

  • The module celery.task.rest; use celery.task.http instead.