|
@@ -0,0 +1,104 @@
|
|
|
+===============================
|
|
|
+ Celery 1.0 has been released!
|
|
|
+===============================
|
|
|
+
|
|
|
+We're happy to announce the release of Celery 1.0.
|
|
|
+
|
|
|
+Stable API
|
|
|
+==========
|
|
|
+
|
|
|
+From this version on the API will be considered stable. This means there won't be any backwards
|
|
|
+incompatible changes to new minor versions. Changes to the API needs to be
|
|
|
+deprecated; so, for example, if we decided to remove a function that existed in Celery 1.0:
|
|
|
+
|
|
|
+* Celery 1.2 will contain a backwards-compatible replica of the function which
|
|
|
+ will raise a ``PendingDeprecationWarning``.
|
|
|
+ This warning is silent by default; you need to explicitly turn on display of these warnings.
|
|
|
+* Celery 1.4 will contain the backwards-compatible replica, but the warning will be promoted to
|
|
|
+ a full-fledged ``DeprecationWarning``. This warning is loud by default, and will likely be
|
|
|
+ quite annoying.
|
|
|
+* Celery 1.6 will remove the feature outright.
|
|
|
+
|
|
|
+See the `Celery Deprecation Timeline`_ for a list of pending removals.
|
|
|
+
|
|
|
+.. _`Celery Deprecation Timeline`:
|
|
|
+ http://ask.github.com/celery/internals/deprecation.html
|
|
|
+
|
|
|
+What's new?
|
|
|
+===========
|
|
|
+
|
|
|
+* New periodic task service.
|
|
|
+
|
|
|
+ Periodic tasks are no longer dispatched by ``celeryd``, but by a separate
|
|
|
+ service called ``celerybeat``. This is an optimized, centralized service
|
|
|
+ dedicated to your periodic tasks, which means you don't have to
|
|
|
+ worry about deadlocks or race conditions any more. But, also it means you
|
|
|
+ have to make sure only one instance of the service is running at any one
|
|
|
+ time.
|
|
|
+
|
|
|
+
|
|
|
+ **TIP:** If you're only running a single ``celeryd`` server, you can embed
|
|
|
+ ``celerybeat`` inside it. Just add the ``--beat`` argument.
|
|
|
+
|
|
|
+* Tasks are automatically registered
|
|
|
+
|
|
|
+ Registering the tasks manually was getting tedious, so now you don't have
|
|
|
+ to anymore. However -- You can still do it manually if you need to, just
|
|
|
+ disable :attr:`Task.autoregister`.
|
|
|
+
|
|
|
+* Awesome new task decorators
|
|
|
+
|
|
|
+ Write your tasks as regular functions and decorate them.
|
|
|
+ There's both :func:`task`, and :func:`periodic_task` decorators.
|
|
|
+
|
|
|
+* Events
|
|
|
+
|
|
|
+ If enabled, the worker is now sending events, telling you what it's
|
|
|
+ doing, and wether it's alive or not. This is the basis for the new
|
|
|
+ real-time web monitor we're working on.
|
|
|
+
|
|
|
+* Rate limiting
|
|
|
+
|
|
|
+ Global and per task rate limits. 10 tasks a second? or one an hour? You
|
|
|
+ got it. It's using the awesome bucket queue algorithm, which is commonly
|
|
|
+ used for network traffic shaping. It accounts for bursts of activity, so
|
|
|
+ your workers won't be bored by having nothing to do.
|
|
|
+
|
|
|
+* Broadcast commands
|
|
|
+
|
|
|
+ You can now revoke tasks if you suddenly change your mind and don't want to run
|
|
|
+ the task anyway, or you can rate limit tasks or shut down the worker remotely.
|
|
|
+
|
|
|
+ It doesn't have many commands yet, but we're waiting for broadcast commands to
|
|
|
+ reach its full potential. Maybe you have some ideas of your own?
|
|
|
+
|
|
|
+* Multiple queues
|
|
|
+
|
|
|
+ The worker is now able to receive tasks on multiple queues at once. This
|
|
|
+ means you can route tasks to arbitrary workers. Read about the insane
|
|
|
+ routing powers of AMQP, and you will surely end up being mighty impressed.
|
|
|
+
|
|
|
+* Platform agnostic message format.
|
|
|
+
|
|
|
+ The message format has been standardized and now uses the ISO-8601 format
|
|
|
+ for dates instead of Python datetime objects. This means you can write task
|
|
|
+ consumers in other languages than Python (``eceleryd`` anyone?)
|
|
|
+
|
|
|
+* Timely
|
|
|
+
|
|
|
+ Periodic tasks are now scheduled on the clock, i.e. ``timedelta(hours=1)``
|
|
|
+ means every hour at :00 minutes, not every hour from the server starts.
|
|
|
+ To revert to the previous behaviour you can enable
|
|
|
+ :attr:`PeriodicTask.relative`.
|
|
|
+
|
|
|
+* Plus a lot more
|
|
|
+
|
|
|
+To read more about these and other changes in detail, please refer to the `changelog`_.
|
|
|
+This document contains crucial information, so if you're upgrading from a previous version of Celery,
|
|
|
+be sure to read the entire change set before you continue.
|
|
|
+
|
|
|
+.. _`changelog`: http://ask.github.com/celery/changelog.html
|
|
|
+
|
|
|
+**TIP:** If you install the :mod:`setproctitle` module you can see which task each
|
|
|
+worker process is currently executing in ``ps`` listings. Just install it
|
|
|
+using pip: ``pip install setproctitle``.
|