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

# Celery Deprecation Time-line

## Removals for version 5.0

### Old Task API

#### Compat Task Modules

- Module `celery.decorators` will be removed:

  > This means you need to change:

  >     from celery.decorators import task

  > Into:

  >     from celery import task

- Module `celery.task` will be removed

  > This means you should change:

  >     from celery.task import task

  > into:

  >     from celery import shared_task

  > —and:

  >     from celery import task

  > into:

  >     from celery import shared_task

  > —and:

  >     from celery.task import Task

  > into:

  >     from celery import Task

Note that the new `Task` class no longer uses `classmethod()` 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!

### Task attributes

The task attributes:

- `queue`

- `exchange`

- `exchange_type`

- `routing_key`

- `delivery_mode`

- `priority`

is deprecated and must be set by `task_routes` instead.

### Modules to Remove

- `celery.execute`

  This module only contains `send_task`: this must be replaced with `app.send_task` instead.

- `celery.decorators`

  > See Compat Task Modules

- `celery.log`

  > Use `app.log` instead.

- `celery.messaging`

  > Use `app.amqp` instead.

- `celery.registry`

  > Use `celery.app.registry` instead.

- `celery.task.control`

  > Use `app.control` instead.

- `celery.task.schedules`

  > Use `celery.schedules` instead.

- `celery.task.chords`

  > Use `celery.chord()` instead.

### 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` | `result_backend`
`CELERY_REDIS_PORT` | `result_backend`
`CELERY_REDIS_DB` | `result_backend`
`CELERY_REDIS_PASSWORD` | `result_backend`
`REDIS_HOST` | `result_backend`
`REDIS_PORT` | `result_backend`
`REDIS_DB` | `result_backend`
`REDIS_PASSWORD` | `result_backend`

### Task_sent signal

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

### Result

Apply to: `AsyncResult`, `EagerResult`:

- `Result.wait()` -> `Result.get()`

- `Result.task_id()` -> `Result.id`

- `Result.status` -> `Result.state`.

#### Settings

Setting name | Replace with
--- | ---
`CELERY_AMQP_TASK_RESULT_EXPIRES` | `result_expires`

## Removals for version 2.0

- The following settings will be removed:

Setting name | Replace with
--- | ---
CELERY_AMQP_CONSUMER_QUEUES | task_queues
CELERY_AMQP_CONSUMER_QUEUES | task_queues
CELERY_AMQP_EXCHANGE | task_default_exchange
CELERY_AMQP_EXCHANGE_TYPE | task_default_exchange_type
CELERY_AMQP_CONSUMER_ROUTING_KEY | task_queues
CELERY_AMQP_PUBLISHER_ROUTING_KEY | task_default_routing_key

- `CELERY_LOADER` definitions without class name.

  > For example,, celery.loaders.default, needs to include the class name: celery.loaders.default.Loader.

- `TaskSet.run()`. Use `celery.task.base.TaskSet.apply_async()`

    instead.