| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753 | 
							- .. _changelog:
 
- ================
 
-  Change history
 
- ================
 
- .. contents::
 
-     :local:
 
- If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
- .. _version-3.1.0:
 
- 3.1.0
 
- =====
 
- :state: DEVEL
 
- :branch: master
 
- - `celery inspect stats` now contains worker pid
 
- - `Task.apply_async` now supports timeout and soft_timeout arguments (Issue #802)
 
- - `App.control.Inspect.conf` can be used for inspecting worker configuration
 
- .. _version-3.0.11:
 
- 3.0.11
 
- ======
 
- :release-date: 2012-09-26 04:00 P.M UTC
 
- - [security:low] generic-init.d scripts changed permissions of /var/log & /var/run
 
-     In the daemonization tutorial the recommended directories were as follows:
 
-     .. code-block:: bash
 
-         CELERYD_LOG_FILE="/var/log/celery/%n.log"
 
-         CELERYD_PID_FILE="/var/run/celery/%n.pid"
 
-     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:
 
-     .. code-block:: bash
 
-         $ sudo /etc/init.d/celeryd create-paths
 
-     .. admonition:: 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:
 
-             http://github.com/celery/celery/tree/3.0/extra/generic-init.d
 
- - Now depends on billiard 2.7.3.17
 
- - Fixes request stack protection when app is initialized more than
 
-   once (Issue #1003).
 
- - ETA tasks now properly works when system timezone is not the same
 
-   as the configured timezone (Issue #1004).
 
- - Terminating a task now works if the task has been sent to the
 
-   pool but not yet acknowledged by a pool process (Issue #1007).
 
-     Fix contributed by Alexey Zatelepin
 
- - Terminating a task now properly updates the state of the task to revoked,
 
-   and sends a ``task-revoked`` event.
 
- - Multi: No longer parses --app option (Issue #1008).
 
- - Generic worker init script now waits for workers to shutdown by default.
 
- - Multi: stop_verify command renamed to stopwait.
 
- - Daemonization: Now delays trying to create pidfile/logfile until after
 
-   the working directory has been changed into.
 
- - :program:`celery worker` and :program:`celery beat` commands now respects
 
-   the :option:`--no-color` option (Issue #999).
 
- - Fixed typos in eventlet examples (Issue #1000)
 
-     Fix contributed by Bryan Bishop.
 
-     Congratulations on opening bug #1000!
 
- - Tasks that raise :exc:`~celery.exceptions.Ignore` are now acknowledged.
 
- - Beat: Now shows the name of the entry in ``sending due task`` logs.
 
- .. _version-3.0.10:
 
- 3.0.10
 
- ======
 
- :release-date: 2012-09-20 05:30 P.M BST
 
- - Now depends on kombu 2.4.7
 
- - Now depends on billiard 2.7.3.14
 
-     - Fixes crash at startup when using Django and pre-1.4 projects
 
-       (setup_environ).
 
-     - Hard time limits now sends the KILL signal shortly after TERM,
 
-       to terminate processes that have signal handlers blocked by C extensions.
 
-     - Billiard now installs even if the C extension cannot be built.
 
-         It's still recommended to build the C extension if you are using
 
-         a transport other than rabbitmq/redis (or use forced execv for some
 
-         other reason).
 
-     - Pool now sets a ``current_process().index`` attribute that can be used to create
 
-       as many log files as there are processes in the pool.
 
- - Canvas: chord/group/chain no longer modifies the state when called
 
-     Previously calling a chord/group/chain would modify the ids of subtasks
 
-     so that:
 
-     .. code-block:: python
 
-         >>> c = chord([add.s(2, 2), add.s(4, 4)], xsum.s())
 
-         >>> c()
 
-         >>> c() <-- call again
 
-     at the second time the ids for the tasks would be the same as in the
 
-     previous invocation.  This is now fixed, so that calling a subtask
 
-     won't mutate any options.
 
- - Canvas: Chaining a chord to another task now works (Issue #965).
 
- - Worker: Fixed a bug where the request stack could be corrupted if
 
-   relative imports are used.
 
-     Problem usually manifested itself as an exception while trying to
 
-     send a failed task result (``NoneType does not have id attribute``).
 
-     Fix contributed by Sam Cooke.
 
- - Tasks can now raise :exc:`~celery.exceptions.Ignore` to skip updating states
 
-   or events after return.
 
-     Example:
 
-     .. code-block:: python
 
-         from celery.exceptions import Ignore
 
-         @task
 
-         def custom_revokes():
 
-             if redis.sismember('tasks.revoked', custom_revokes.request.id):
 
-                 raise Ignore()
 
- - The worker now makes sure the request/task stacks are not modified
 
-   by the initial ``Task.__call__``.
 
-     This would previously be a problem if a custom task class defined
 
-     ``__call__`` and also called ``super()``.
 
- - Because of problems the fast local optimization has been disabled,
 
-   and can only be enabled by setting the :envvar:`USE_FAST_LOCALS` attribute.
 
- - Worker: Now sets a default socket timeout of 5 seconds at shutdown
 
-   so that broken socket reads do not hinder proper shutdown (Issue #975).
 
- - More fixes related to late eventlet/gevent patching.
 
- - Documentation for settings out of sync with reality:
 
-     - :setting:`CELERY_TASK_PUBLISH_RETRY`
 
-         Documented as disabled by default, but it was enabled by default
 
-         since 2.5 as stated by the 2.5 changelog.
 
-     - :setting:`CELERY_TASK_PUBLISH_RETRY_POLICY`
 
-         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).
 
-     Also, because of a suspected bug in gevent the
 
-     :setting:`BROKER_CONNECTION_TIMEOUT` setting has been disabled
 
-     when using gevent
 
- 3.0.9
 
- =====
 
- :release-date: 2012-08-31 06:00 P.M BST
 
- - Important note for users of Django and the database scheduler!
 
-     Recently a timezone issue has been fixed for periodic tasks,
 
-     but erroneous timezones could have already been stored in the
 
-     database, so for the fix to work you need to reset
 
-     the ``last_run_at`` fields.
 
-     You can do this by executing the following command:
 
-     .. code-block:: bash
 
-         $ python manage.py shell
 
-         >>> from djcelery.models import PeriodicTask
 
-         >>> PeriodicTask.objects.update(last_run_at=None)
 
-     You also have to do this if you change the timezone or
 
-     :setting:`CELERY_ENABLE_UTC` setting.
 
- - Note about the :setting:`CELERY_ENABLE_UTC` setting.
 
-     If you previously disabled this just to force periodic tasks to work with
 
-     your timezone, then you are now *encouraged to re-enable it*.
 
- - Now depends on Kombu 2.4.5 which fixes PyPy + Jython installation.
 
- - Fixed bug with timezones when :setting:`CELERY_ENABLE_UTC` is disabled
 
-   (Issue #952).
 
- - Fixed a typo in the celerybeat upgrade mechanism (Issue #951).
 
- - Make sure the `exc_info` argument to logging is resolved (Issue #899).
 
- - Fixed problem with Python 3.2 and thread join timeout overflow (Issue #796).
 
- - A test case was occasionally broken for Python 2.5.
 
- - Unit test suite now passes for PyPy 1.9.
 
- - App instances now supports the with statement.
 
-     This calls the new :meth:`~celery.Celery.close` method at exit, which
 
-     cleans up after the app like closing pool connections.
 
-     Note that this is only necessary when dynamically creating apps,
 
-     e.g. for "temporary" apps.
 
- - Support for piping a subtask to a chain.
 
-     For example:
 
-     .. code-block:: python
 
-         pipe = sometask.s() | othertask.s()
 
-         new_pipe = mytask.s() | pipe
 
-     Contributed by Steve Morin.
 
- - Fixed problem with group results on non-pickle serializers.
 
-     Fix contributed by Steeve Morin.
 
- .. _version-3.0.8:
 
- 3.0.8
 
- =====
 
- :release-date: 2012-08-29 05:00 P.M BST
 
- - Now depends on Kombu 2.4.4
 
- - Fixed problem with amqplib and receiving larger message payloads
 
-   (Issue #922).
 
-     The problem would manifest itself as either the worker hanging,
 
-     or occasionally a ``Framing error`` exception appearing.
 
-     Users of the new ``pyamqp://`` transport must upgrade to
 
-     :mod:`amqp` 0.9.3.
 
- - Beat: Fixed another timezone bug with interval and crontab schedules
 
-   (Issue #943).
 
- - Beat: The schedule file is now automatically cleared if the timezone
 
-   is changed.
 
-     The schedule is also cleared when you upgrade to 3.0.8 from an earlier
 
-     version, this to register the initial timezone info.
 
- - Events: The :event:`worker-heartbeat` event now include processed and active
 
-   count fields.
 
-     Contributed by Mher Movsisyan.
 
- - Fixed error with error email and new task classes (Issue #931).
 
- - ``BaseTask.__call__`` is no longer optimized away if it has been monkey
 
-   patched.
 
- - Fixed shutdown issue when using gevent (Issue #911 & Issue #936).
 
-     Fix contributed by Thomas Meson.
 
- .. _version-3.0.7:
 
- 3.0.7
 
- =====
 
- :release-date: 2012-08-24 05:00 P.M BST
 
- - Fixes several problems with periodic tasks and timezones (Issue #937).
 
- - Now depends on kombu 2.4.2
 
-     - Redis: Fixes a race condition crash
 
-     - Fixes an infinite loop that could happen when retrying establishing
 
-       the broker connection.
 
- - Daemons now redirect standard file descriptors to :file:`/dev/null`
 
-     Though by default the standard outs are also redirected
 
-     to the logger instead, but you can disable this by changing
 
-     the :setting:`CELERY_REDIRECT_STDOUTS` setting.
 
- - Fixes possible problems when eventlet/gevent is patched too late.
 
- - ``LoggingProxy`` no longer defines ``fileno()`` (Issue #928).
 
- - Results are now ignored for the chord unlock task.
 
-     Fix contributed by Steeve Morin.
 
- - Cassandra backend now works if result expiry is disabled.
 
-     Fix contributed by Steeve Morin.
 
- - The traceback object is now passed to signal handlers instead
 
-   of the string representation.
 
-     Fix contributed by Adam DePue.
 
- - Celery command: Extensions are now sorted by name.
 
- - A regression caused the :event:`task-failed` event to be sent
 
-   with the exception object instead of its string representation.
 
- - The worker daemon would try to create the pid file before daemonizing
 
-   to catch errors, but this file was not immediately released (Issue #923).
 
- - Fixes Jython compatibility.
 
- - ``billiard.forking_enable`` was called by all pools not just the
 
-   processes pool, which would result in a useless warning if the billiard
 
-   C extensions were not installed.
 
- .. _version-3.0.6:
 
- 3.0.6
 
- =====
 
- :release-date: 2012-08-17 11:00 P.M BST
 
- - Now depends on kombu 2.4.0
 
- - Now depends on billiard 2.7.3.12
 
- - Redis: Celery now tries to restore messages whenever there are no messages
 
-   in the queue.
 
- - Crontab schedules now properly respects :setting:`CELERY_TIMEZONE` setting.
 
-     It's important to note that crontab schedules uses UTC time by default
 
-     unless this setting is set.
 
-     Issue #904 and django-celery #150.
 
- - ``billiard.enable_forking`` is now only set by the processes pool.
 
- - The transport is now properly shown by :program:`celery report`
 
-   (Issue #913).
 
- - The `--app` argument now works if the last part is a module name
 
-   (Issue #921).
 
- - Fixed problem with unpickleable exceptions (billiard #12).
 
- - Adds ``task_name`` attribute to ``EagerResult`` which is always
 
-   :const:`None` (Issue #907).
 
- - Old Task class in :mod:`celery.task` no longer accepts magic kwargs by
 
-   default (Issue #918).
 
-     A regression long ago disabled magic kwargs for these, and since
 
-     no one has complained about it we don't have any incentive to fix it now.
 
- - The ``inspect reserved`` control command did not work properly.
 
- - Should now play better with static analyzation tools by explicitly
 
-   specifying dynamically created attributes in the :mod:`celery` and
 
-   :mod:`celery.task` modules.
 
- - Terminating a task now results in
 
-   :exc:`~celery.exceptions.RevokedTaskError` instead of a ``WorkerLostError``.
 
- - ``AsyncResult.revoke`` now accepts ``terminate`` and ``signal`` arguments.
 
- - The :event:`task-revoked` event now includes new fields: ``terminated``,
 
-   ``signum``, and ``expired``.
 
- - The argument to :class:`~celery.exceptions.TaskRevokedError` is now one
 
-   of the reasons ``revoked``, ``expired`` or ``terminated``.
 
- - Old Task class does no longer use classmethods for push_request and
 
-   pop_request  (Issue #912).
 
- - ``GroupResult`` now supports the ``children`` attribute (Issue #916).
 
- - ``AsyncResult.collect`` now respects the ``intermediate`` argument
 
-   (Issue #917).
 
- - Fixes example task in documentation (Issue #902).
 
- - Eventlet fixed so that the environment is patched as soon as possible.
 
- - eventlet: Now warns if celery related modules that depends on threads
 
-   are imported before eventlet is patched.
 
- - Improved event and camera examples in the monitoring guide.
 
- - Disables celery command setuptools entrypoints if the command can't be
 
-   loaded.
 
- - Fixed broken ``dump_request`` example in the tasks guide.
 
- .. _version-3.0.5:
 
- 3.0.5
 
- =====
 
- :release-date: 2012-08-01 04:00 P.M BST
 
- - Now depends on kombu 2.3.1 + billiard 2.7.3.11
 
- - Fixed a bug with the -B option (``cannot pickle thread.lock objects``)
 
-   (Issue #894 + Issue #892, + django-celery #154).
 
- - The :control:`restart_pool` control command now requires the
 
-   :setting:`CELERYD_POOL_RESTARTS` setting to be enabled
 
-     This change was necessary as the multiprocessing event that the restart
 
-     command depends on is responsible for creating many semaphores/file
 
-     descriptors, resulting in problems in some environments.
 
- - ``chain.apply`` now passes args to the first task (Issue #889).
 
- - Documented previously secret options to the Django-Celery monitor
 
-   in the monitoring userguide (Issue #396).
 
- - Old changelog are now organized in separate documents for each series,
 
-   see :ref:`history`.
 
- .. _version-3.0.4:
 
- 3.0.4
 
- =====
 
- :release-date: 2012-07-26 07:00 P.M BST
 
- - Now depends on Kombu 2.3
 
- - New experimental standalone Celery monitor: Flower
 
-     See :ref:`monitoring-flower` to read more about it!
 
-     Contributed by Mher Movsisyan.
 
- - Now supports AMQP heartbeats if using the new ``pyamqp://`` transport.
 
-     - The py-amqp transport requires the :mod:`amqp` library to be installed::
 
-         $ pip install amqp
 
-     - Then you need to set the transport URL prefix to ``pyamqp://``.
 
-     - The default heartbeat value is 10 seconds, but this can be changed using
 
-       the :setting:`BROKER_HEARTBEAT` setting::
 
-         BROKER_HEARTBEAT = 5.0
 
-     - If the broker heartbeat is set to 10 seconds, the heartbeats will be
 
-       monitored every 5 seconds (double the hertbeat rate).
 
-     See the `Kombu 2.3 changelog`_ for more information.
 
- .. _`Kombu 2.3 changelog`:
 
-     http://kombu.readthedocs.org/en/latest/changelog.html#version-2-3-0
 
- - Now supports RabbitMQ Consumer Cancel Notifications, using the ``pyamqp://``
 
-   transport.
 
-     This is essential when running RabbitMQ in a cluster.
 
-     See the `Kombu 2.3 changelog`_ for more information.
 
- - Delivery info is no longer passed directly through.
 
-     It was discovered that the SQS transport adds objects that can't
 
-     be pickled to the delivery info mapping, so we had to go back
 
-     to using the whitelist again.
 
-     Fixing this bug also means that the SQS transport is now working again.
 
- - The semaphore was not properly released when a task was revoked (Issue #877).
 
-     This could lead to tasks being swallowed and not released until a worker
 
-     restart.
 
-     Thanks to Hynek Schlawack for debugging the issue.
 
- - Retrying a task now also forwards any linked tasks.
 
-     This means that if a task is part of a chain (or linked in some other
 
-     way) and that even if the task is retried, then the next task in the chain
 
-     will be executed when the retry succeeds.
 
- - Chords: Now supports setting the interval and other keyword arguments
 
-   to the chord unlock task.
 
-     - The interval can now be set as part of the chord subtasks kwargs::
 
-         chord(header)(body, interval=10.0)
 
-     - In addition the chord unlock task now honors the Task.default_retry_delay
 
-       option, used when none is specified, which also means that the default
 
-       interval can also be changed using annotations:
 
-         .. code-block:: python
 
-             CELERY_ANNOTATIONS = {
 
-                 'celery.chord_unlock': {
 
-                     'default_retry_delay': 10.0,
 
-                 }
 
-             }
 
- - New :meth:`@Celery.add_defaults` method can add new default configuration
 
-   dicts to the applications configuration.
 
-     For example::
 
-         config = {'FOO': 10}
 
-         celery.add_defaults(config)
 
-     is the same as ``celery.conf.update(config)`` except that data will not be
 
-     copied, and that it will not be pickled when the worker spawns child
 
-     processes.
 
-     In addition the method accepts a callable::
 
-         def initialize_config():
 
-             # insert heavy stuff that can't be done at import time here.
 
-         celery.add_defaults(initialize_config)
 
-     which means the same as the above except that it will not happen
 
-     until the celery configuration is actually used.
 
-     As an example, Celery can lazily use the configuration of a Flask app::
 
-         flask_app = Flask()
 
-         celery = Celery()
 
-         celery.add_defaults(lambda: flask_app.config)
 
- - Revoked tasks were not marked as revoked in the result backend (Issue #871).
 
-     Fix contributed by Hynek Schlawack.
 
- - Eventloop now properly handles the case when the epoll poller object
 
-   has been closed (Issue #882).
 
- - Fixed syntax error in ``funtests/test_leak.py``
 
-     Fix contributed by Catalin Iacob.
 
- - group/chunks: Now accepts empty task list (Issue #873).
 
- - New method names:
 
-     - ``Celery.default_connection()`` ➠  :meth:`~@Celery.connection_or_acquire`.
 
-     - ``Celery.default_producer()``   ➠  :meth:`~@Celery.producer_or_acquire`.
 
-     The old names still work for backward compatibility.
 
- .. _version-3.0.3:
 
- 3.0.3
 
- =====
 
- :release-date: 2012-07-20 09:17 P.M BST
 
- :by: Ask Solem
 
- - amqplib passes the channel object as part of the delivery_info
 
-   and it's not pickleable, so we now remove it.
 
- .. _version-3.0.2:
 
- 3.0.2
 
- =====
 
- :release-date: 2012-07-20 04:00 P.M BST
 
- :by: Ask Solem
 
- - A bug caused the following task options to not take defaults from the
 
-    configuration (Issue #867 + Issue #858)
 
-     The following settings were affected:
 
-     - :setting:`CELERY_IGNORE_RESULT`
 
-     - :setting:`CELERYD_SEND_TASK_ERROR_EMAILS`
 
-     - :setting:`CELERY_TRACK_STARTED`
 
-     - :setting:`CElERY_STORE_ERRORS_EVEN_IF_IGNORED`
 
-     Fix contributed by John Watson.
 
- - Task Request: ``delivery_info`` is now passed through as-is (Issue #807).
 
- - The eta argument now supports datetime's with a timezone set (Issue #855).
 
- - The worker's banner displayed the autoscale settings in the wrong order
 
-   (Issue #859).
 
- - Extension commands are now loaded after concurrency is set up
 
-   so that they don't interfere with e.g. eventlet patching.
 
- - Fixed bug in the threaded pool (Issue #863)
 
- - The task failure handler mixed up the fields in :func:`sys.exc_info`.
 
-     Fix contributed by Rinat Shigapov.
 
- - Fixed typos and wording in the docs.
 
-     Fix contributed by Paul McMillan
 
- - New setting: :setting:`CELERY_WORKER_DIRECT`
 
-     If enabled each worker will consume from their own dedicated queue
 
-     which can be used to route tasks to specific workers.
 
- - Fixed several edge case bugs in the add consumer remote control command.
 
- - :mod:`~celery.contrib.migrate`: Can now filter and move tasks to specific
 
-   workers if :setting:`CELERY_WORKER_DIRECT` is enabled.
 
-     Among other improvements, the following functions have been added:
 
-         * ``move_direct(filterfun, **opts)``
 
-         * ``move_direct_by_id(task_id, worker_hostname, **opts)``
 
-         * ``move_direct_by_idmap({task_id: worker_hostname, ...}, **opts)``
 
-         * ``move_direct_by_taskmap({task_name: worker_hostname, ...}, **opts)``
 
- - :meth:`~celery.Celery.default_connection` now accepts a pool argument that
 
-   if set to false causes a new connection to be created instead of acquiring
 
-   one from the pool.
 
- - New signal: :signal:`celeryd_after_setup`.
 
- - Default loader now keeps lowercase attributes from the configuration module.
 
- .. _version-3.0.1:
 
- 3.0.1
 
- =====
 
- :release-date: 2012-07-10 06:00 P.M BST
 
- :by: Ask Solem
 
- - Now depends on kombu 2.2.5
 
- - inspect now supports limit argument::
 
-     myapp.control.inspect(limit=1).ping()
 
- - Beat: now works with timezone aware datetime's.
 
- - Task classes inheriting ``from celery import Task``
 
-   mistakingly enabled ``accept_magic_kwargs``.
 
- - Fixed bug in ``inspect scheduled`` (Issue #829).
 
- - Beat: Now resets the schedule to upgrade to UTC.
 
- - The :program:`celery worker` command now works with eventlet/gevent.
 
-     Previously it would not patch the environment early enough.
 
- - The :program:`celery` command now supports extension commands
 
-   using setuptools entry-points.
 
-     Libraries can add additional commands to the :program:`celery`
 
-     command by adding an entry-point like::
 
-         setup(
 
-             entry_points=[
 
-                 'celery.commands': [
 
-                     'foo = my.module:Command',
 
-             ],
 
-         ],
 
-         ...)
 
-     The command must then support the interface of
 
-     :class:`celery.bin.base.Command`.
 
- - contrib.migrate: New utilities to move tasks from one queue to another.
 
-     - :func:`~celery.contrib.migrate.move_tasks`
 
-     - :func:`~celery.contrib.migrate.move_task_by_id`
 
- - The :event:`task-sent` event now contains ``exchange`` and ``routing_key``
 
-   fields.
 
- - Fixes bug with installing on Python 3.
 
-     Fix contributed by Jed Smith.
 
- .. _version-3.0.0:
 
- 3.0.0 (Chiastic Slide)
 
- ======================
 
- :release-date: 2012-07-07 01:30 P.M BST
 
- :by: Ask Solem
 
- See :ref:`whatsnew-3.0`.
 
 
  |