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

Change history

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


release-date:2017-??-?? ??:?? PM PST
release-by:Ask Solem
  • Requirements

    • Now depends on Kombu 4.0.3.
  • Results: Elasticsearch now reuses fields when new results are added.

    Contributed by Mike Chen.

  • Results: Fixed MongoDB integration when using binary encodings (Issue #3575).

    Contributed by Andrew de Quincey.

  • Worker: Making missing *args and **kwargs in Task protocol 1

return empty value in protocol 2 (Issue #3687).

Contributed by Roman Sichny.
  • App: Fixed TypeError in AMQP when using deprecated signal (Issue #3707).

    Contributed by @michael-k.

  • Beat: Added a transparent method to update the scheduler heap.

    Contributed by Alejandro Pernin.

  • Task: Fixed handling of tasks with keyword arguments on Python 3 (Issue #3657).

    Contributed by Roman Sichny.

  • Task: Fixed request context for blocking task apply by adding missing hostname attribute.

    Contributed by Marat Sharafutdinov.

  • Task: Added option to run subtasks synchronously with disable_sync_subtasks argument.

    Contributed by @shalev67.

  • App: Fixed chaining of replaced tasks (Issue #3726).

    Contributed by Morgan Doocy.

  • Canvas: Fixed bug where replaced tasks with groups were not completing (Issue #3725).

    Contributed by Morgan Doocy.

  • Worker: Fixed problem where consumer does not shutdown properly when embedded in a gevent application (Issue #3745).

    Contributed by Arcadiy Ivanov.

  • Results: Added support for using AWS DynamoDB as a result backend.

    Contributed by George Psarakis.

  • Testing: Added caching on pip installs.

    Contributed by @orf.

  • Worker: Prevent consuming queue before ready on startup (Issue #3620).

    Contributed by Alan Hamlett.

  • App: Fixed task ETA issues when timezone is defined in configuration (Issue #3753).

    Contributed by George Psarakis.

  • Utils: maybe_make_aware should not modify datetime when it is already timezone-aware (Issue #3849).

    Contributed by Taylor C. Richberger.

  • App: Fixed retrying tasks with expirations (Issue #3734).

    Contributed by Brendan MacDonell.

  • Results: Allow unicode message for exceptions raised in task (Issue #3858).

    Contributed by @staticfox.

  • Canvas: Fixed IndexError raised when chord has an empty header.

    Contributed by Marc Gibbons.

  • Canvas: Avoid duplicating chains in chords (Issue #3771).

    Contributed by Ryan Hiebert and George Psarakis.

  • Utils: Allow class methods to define tasks (Issue #3863).

    Contributed by George Psarakis.

  • Beat: Populate heap when periodic tasks are changed.

    Contributed by @wzywno and Brian May.

  • Results: Added support for Elasticsearch backend options settings.

    Contributed by @Acey9.

  • Events: Ensure Task.as_dict() works when not all information about task is available.

    Contributed by @tramora.

  • Schedules: Fixed pickled crontab schedules to restore properly (Issue #3826).

    Contributed by Taylor C. Richberger.

  • Results: Added SSL option for redis backends (Issue #3830).

    Contributed by Chris Kuehl.

  • Documentation and examples improvements by:

    • Bruno Alla
    • Jamie Alessio
    • Peter Bittner
    • Jon Dufresne
    • Sergey Fursov
    • Daniel Hahler
    • Mike Helmick
    • Marc Hörsken
    • Christopher Hoskin
    • Michal Kuffa
    • Simon Legner
    • Ed Morley
    • Dmytro Petruk
    • Salvatore Rinchiera
    • Arnaud Rocher
    • YuLun Shih
    • Tom ‘Biwaa’ Riat
    • Arthur Vigil
    • Joey Wilhelm
    • Jian Yu
    • @baixuexue123
    • @bronsen
    • @michael-k
    • @orf
    • @3lnc


release-date:2016-12-15 03:40 PM PST
release-by:Ask Solem
  • Requirements

  • Tasks: Fixed problem with JSON serialization of group (keys must be string error, Issue #3688).

  • Worker: Fixed JSON serialization issue when using inspect active and friends (Issue #3667).

  • App: Fixed saferef errors when using signals (Issue #3670).

  • Prefork: Fixed bug with pack requiring bytes argument on Python 2.7.5 and earlier (Issue #3674).

  • Tasks: Saferepr did not handle unicode in bytestrings on Python 2 (Issue #3676).

  • Testing: Added new celery_worker_paremeters fixture.

    Contributed by Michael Howitz.

  • Tasks: Added new app argument to GroupResult.restore (Issue #3669).

    This makes the restore method behave the same way as the GroupResult constructor.

    Contributed by Andreas Pelme.

  • Tasks: Fixed type checking crash when task takes *args on Python 3 (Issue #3678).

  • Documentation and examples improvements by:


release-date:2016-12-08 05:22 PM PST
release-by:Ask Solem
  • [Security: CELERYSA-0003] Insecure default configuration

    The default accept_content setting was set to allow deserialization of pickled messages in Celery 4.0.0.

    The insecure default has been fixed in 4.0.1, and you can also configure the 4.0.0 version to explicitly only allow json serialized messages:

    app.conf.accept_content = ['json']
  • Tasks: Added new method to register class-based tasks (Issue #3615).

    To register a class based task you should now call app.register_task:

    from celery import Celery, Task
    app = Celery()
    class CustomTask(Task):
        def run(self):
            return 'hello'
  • Tasks: Argument checking now supports keyword-only arguments on Python3 (Issue #3658).

    Contributed by @sww.

  • Tasks: The task-sent event was not being sent even if configured to do so (Issue #3646).

  • Worker: Fixed AMQP heartbeat support for eventlet/gevent pools (Issue #3649).

  • App: app.conf.humanize() would not work if configuration not finalized (Issue #3652).

  • Utils: saferepr attempted to show iterables as lists and mappings as dicts.

  • Utils: saferepr did not handle unicode-errors when attempting to format bytes on Python 3 (Issue #3610).

  • Utils: saferepr should now properly represent byte strings with non-ascii characters (Issue #3600).

  • Results: Fixed bug in elasticsearch where _index method missed the body argument (Issue #3606).

    Fix contributed by 何翔宇 (Sean Ho).

  • Canvas: Fixed ValueError in chord with single task header (Issue #3608).

    Fix contributed by Viktor Holmqvist.

  • Task: Ensure class-based task has name prior to registration (Issue #3616).

    Fix contributed by Rick Wargo.

  • Beat: Fixed problem with strings in shelve (Issue #3644).

    Fix contributed by Alli.

  • Worker: Fixed KeyError in inspect stats when -O argument set to something other than fast or fair (Issue #3621).

  • Task: Retried tasks were no longer sent to the original queue (Issue #3622).

  • Worker: Python 3: Fixed None/int type comparison in apps/ (Issue #3631).

  • Results: Redis has a new redis_socket_connect_timeout setting.

  • Results: Redis result backend passed the socket_connect_timeout argument to UNIX socket based connections by mistake, causing a crash.

  • Worker: Fixed missing logo in worker splash screen when running on Python 3.x (Issue #3627).

    Fix contributed by Brian Luan.

  • Deps: Fixed celery[redis] bundle installation (Issue #3643).

    Fix contributed by Rémi Marenco.

  • Deps: Bundle celery[sqs] now also requires pycurl (Issue #3619).

  • Worker: Hard time limits were no longer being respected (Issue #3618).

  • Worker: Soft time limit log showed Trues instead of the number of seconds.

  • App: registry_cls argument no longer had any effect (Issue #3613).

  • Worker: Event producer now uses connection_for_Write (Issue #3525).

  • Results: Redis/memcache backends now uses result_expires to expire chord counter (Issue #3573).

    Contributed by Tayfun Sen.

  • Django: Fixed command for upgrading settings with Django (Issue #3563).

    Fix contributed by François Voron.

  • Testing: Added a celery_parameters test fixture to be able to use customized Celery init parameters. (#3626)

    Contributed by Steffen Allner.

  • Documentation improvements contributed by

    • @csfeathers
    • Moussa Taifi
    • Yuhannaa
    • Laurent Peuch
    • Christian
    • Bruno Alla
    • Steven Johns
    • @tnir
    • GDR!


release-date:2016-11-04 02:00 P.M PDT
release-by:Ask Solem

See What’s new in Celery 4.0 (latentcall) (in docs/whatsnew-4.0.rst).


release-date:2016-11-02 01:30 P.M PDT

Important notes

  • Database result backend related setting names changed from sqlalchemy_* -> database_*.

    The sqlalchemy_ named settings won’t work at all in this version so you need to rename them. This is a last minute change, and as they were not supported in 3.1 we will not be providing aliases.

  • chain(A, B, C) now works the same way as A | B | C.

    This means calling chain() might not actually return a chain, it can return a group or any other type depending on how the workflow can be optimized.