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

# Change history for Celery 2.5

This document contains change notes for bugfix releases in the 2.5.x series, please see What’s new in Celery 2.5 for an overview of what’s new in Celery 2.5.

If you’re looking for versions prior to 2.5 you should visit our History of releases.

## 2.5.5

release-date:

  2012-06-06 04:00 p.m. BST

release-by:

  Ask Solem

This is a dummy release performed for the following goals:

- Protect against force upgrading to Kombu 2.2.0

- Version parity with https://pypi.org/project/django-celery/

## 2.5.3

release-date:

  2012-04-16 07:00 p.m. BST

release-by:

  Ask Solem

- A bug causes messages to be sent with UTC time-stamps even though `CELERY_ENABLE_UTC` wasn’t enabled (Issue #636).

- `celerybeat`: No longer crashes if an entry’s args is set to None (Issue #657).

- Auto-reload didn’t work if a module’s `__file__` attribute was set to the modules `.pyc` file. (Issue #647).

- Fixes early 2.5 compatibility where `__package__` doesn’t exist (Issue #638).

## 2.5.2

release-date:

  2012-04-13 04:30 p.m. GMT

release-by:

  Ask Solem

### News

- Now depends on Kombu 2.1.5.

- Django documentation has been moved to the main Celery docs.

  > See Django.

- New `celeryd_init` signal can be used to configure workers by hostname.

- Signal.connect can now be used as a decorator.

  > Example:

  >     from celery.signals import task_sent

  >     @task_sent.connect
  >     def on_task_sent(**kwargs):
  >         print('sent task: %r' % (kwargs,))

- Invalid task messages are now rejected instead of acked.

  > This means that they will be moved to the dead-letter queue introduced in the latest RabbitMQ version (but must be enabled manually, consult the RabbitMQ documentation).

- Internal logging calls has been cleaned up to work better with tools like Sentry.

  > Contributed by David Cramer.

- New method `subtask.clone()` can be used to clone an existing subtask with augmented arguments/options.

  > Example:

  >     >>> s = add.subtask((5,))
  >     >>> new = s.clone(args=(10,), countdown=5})
  >     >>> new.args
  >     (10, 5)

  >     >>> new.options
  >     {'countdown': 5}

- Chord callbacks are now triggered in eager mode.

### Fixes

- Programs now verifies that the pidfile is actually written correctly (Issue #641).

  > Hopefully this will crash the worker immediately if the system is out of space to store the complete pidfile.

  > In addition, we now verify that existing pidfiles contain a new line so that a partially written pidfile is detected as broken, as before doing:

  >     $ echo -n "1" > celeryd.pid

  > would cause the worker to think that an existing instance was already running (init has pid 1 after all).

- Fixed 2.5 compatibility issue with use of print_exception.

  > Fix contributed by Martin Melin.

- Fixed 2.5 compatibility issue with imports.

  > Fix contributed by Iurii Kriachko.

- All programs now fix up `__package__` when called as main.

  > This fixes compatibility with Python 2.5.

  > Fix contributed by Martin Melin.

- [celery control|inspect] can now be configured on the command-line.

  > Like with the worker it is now possible to configure Celery settings on the command-line for celery control|inspect

  >     $ celery inspect -- broker.pool_limit=30

- Version dependency for https://pypi.org/project/python-dateutil/ fixed to be strict.

  > Fix contributed by Thomas Meson.

- `Task.__call__` is now optimized away in the task tracer rather than when the task class is created.

  > This fixes a bug where a custom __call__ may mysteriously disappear.

- Auto-reload’s `inotify` support has been improved.

  > Contributed by Mher Movsisyan.

- The Django broker documentation has been improved.

- Removed confusing warning at top of routing user guide.

## 2.5.1

release-date:

  2012-03-01 01:00 p.m. GMT

release-by:

  Ask Solem

### Fixes

- Eventlet/Gevent: A small typo caused the worker to hang when eventlet/gevent was used, this was because the environment wasn’t monkey patched early enough.

- Eventlet/Gevent: Another small typo caused the mediator to be started with eventlet/gevent, which would make the worker sometimes hang at shutdown.

- `multiprocessing`: Fixed an error occurring if the pool was stopped before it was properly started.

- Proxy objects now redirects `__doc__` and `__name__` so `help(obj)` works.

- Internal timer (timer2) now logs exceptions instead of swallowing them (Issue #626).

- celery shell: can now be started with `--eventlet` or `--gevent` options to apply their monkey patches.

## 2.5.0

release-date:

  2012-02-24 04:00 p.m. GMT

release-by:

  Ask Solem

See What’s new in Celery 2.5.

Since the changelog has gained considerable size, we decided to do things differently this time: by having separate “what’s new” documents for major version changes.

Bugfix releases will still be found in the changelog.