After this change the --statedb file will take up more disk space,
but loading from and storing the revoked tasks will be considerably
faster (what before took 5 minutes will now take less than a second).

Celery will now suggest alternatives if there’s a typo in the
broker transport name (e.g. ampq -> amqp).

Worker: The auto-reloader would cause a crash if a monitored file
was unlinked.

Fix contributed by Agris Ameriks.

Fixed AsyncResult pickling error.

Fix contributed by Thomas Minor.

Fixed handling of Unicode in logging output when using log colors
(Issue #427).

ConfigurationView is now a MutableMapping.

Contributed by Aaron Harnly.

Fixed memory leak in LRU cache implementation.

Fix contributed by Romuald Brunet.

celery.contrib.rdb: Now works when sockets are in non-blocking mode.

Fix contributed by Theo Spears.

The inspect reserved remote control command included active (started) tasks
with the reserved tasks (Issue #1030).

The task_failure signal received a modified traceback object
meant for pickling purposes, this has been fixed so that it now
receives the real traceback instead.

It was causing too many problems for users, you can still enable
it using the CELERYD_FORCE_EXECV setting.

execv was only enabled when transports other than amqp/redis was used,
and it’s there to prevent deadlocks caused by mutexes not being released
before the process forks. Sadly it also changes the environment
introducing many corner case bugs that is hard to fix without adding
horrible hacks. Deadlock issues are reported far less often than the
bugs that execv are causing, so we now disable it by default.

Work is in motion to create non-blocking versions of these transports
so that execv is not necessary (which is the situation with the amqp
and redis broker transports)

Chord exception behavior defined (Issue #1172).

From Celery 3.1 the chord callback will change state to FAILURE
when a task part of a chord raises an exception.

It was never documented what happens in this case,
and the actual behavior was very unsatisfactory, indeed
it will just forward the exception value to the chord callback.

For backward compatibility reasons we do not change to the new
behavior in a bugfix release, even if the current behavior was
never documented. Instead you can enable the
CELERY_CHORD_PROPAGATES setting to get the new behavior
that will be default from Celery 3.1.

But in the scripts themselves the default files were /var/log/celery%n.log
and /var/run/celery%n.pid, so if the user did not change the location
by configuration, the directories /var/log and /var/run would be
created - and worse have their permissions and owners changed.

This change means that:

Default pid file is /var/run/celery/%n.pid

Default log file is /var/log/celery/%n.log

The directories are only created and have their permissions
changed if no custom locations are set.

Users can force paths to be created by calling the create-paths
subcommand:

$ sudo /etc/init.d/celeryd create-paths

Upgrading Celery will not update init scripts

To update the init scripts you have to re-download
the files from source control and update them manually.
You can find the init scripts for version 3.0.x at:

The default max_retries had been set to 100, but documented as being
3, and the interval_max was set to 1 but documented as 0.2.
The default setting are now set to 3 and 0.2 as it was originally
documented.

Fix contributed by Matt Long.

Worker: Log messages when connection established and lost have been improved.

The repr of a crontab schedule value of ‘0’ should be ‘*’ (Issue #972).

Revoked tasks are now removed from reserved/active state in the worker
(Issue #969)

Fix contributed by Alexey Zatelepin.

gevent: Now supports hard time limits using gevent.Timeout.

Documentation: Links to init scripts now point to the 3.0 branch instead
of the development branch (master).

Documentation: Fixed typo in signals user guide (Issue #986).

instance.app.queues -> instance.app.amqp.queues.

Eventlet/gevent: The worker did not properly set the custom app
for new greenlets.

Eventlet/gevent: Fixed a bug where the worker could not recover
from connection loss (Issue #959).