| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | :Version: 2.2.4:Web: http://celeryproject.org/:Download: http://pypi.python.org/pypi/celery/:Source: http://github.com/ask/celery/:Keywords: task queue, job queue, asynchronous, rabbitmq, amqp, redis,  python, webhooks, queue, distributed--.. _celery-synopsis:Celery is an open source asynchronous task queue/job queue based ondistributed message passing.  It is focused on real-time operation,but supports scheduling as well.The execution units, called tasks, are executed concurrently on one ormore worker nodes using multiprocessing, `Eventlet`_ or `gevent`_.  Tasks canexecute asynchronously (in the background) or synchronously(wait until ready).Celery is used in production systems to process millions of tasks a day.Celery is written in Python, but the protocol can be implemented in anylanguage.  It can also `operate with other languages using webhooks`_.The recommended message broker is `RabbitMQ`_, but limited support for`Redis`_, `Beanstalk`_, `MongoDB`_, `CouchDB`_ anddatabases (using `SQLAlchemy`_ or the `Django ORM`_) is also available.Celery is easy to integrate with `Django`_, `Pylons`_ and `Flask`_, usingthe `django-celery`_, `celery-pylons`_ and `Flask-Celery`_ add-on packages... _`RabbitMQ`: http://www.rabbitmq.com/.. _`Redis`: http://code.google.com/p/redis/.. _`SQLAlchemy`: http://www.sqlalchemy.org/.. _`Django`: http://djangoproject.com/.. _`Django ORM`: http://djangoproject.com/.. _`Eventlet`: http://eventlet.net/.. _`gevent`: http://gevent.org/.. _`Beanstalk`: http://kr.github.com/beanstalkd/.. _`MongoDB`: http://mongodb.org/.. _`CouchDB`: http://couchdb.apache.org/.. _`Pylons`: http://pylonshq.com/.. _`Flask`: http://flask.pocoo.org/.. _`django-celery`: http://pypi.python.org/pypi/django-celery.. _`celery-pylons`: http://pypi.python.org/pypi/celery-pylons.. _`Flask-Celery`: http://github.com/ask/flask-celery/.. _`operate with other languages using webhooks`:    http://ask.github.com/celery/userguide/remote-tasks.html.. contents::    :local:.. _celery-overview:Overview========This is a high level overview of the architecture... image:: http://cloud.github.com/downloads/ask/celery/Celery-Overview-v4.jpgThe broker delivers tasks to the worker nodes.A worker node is a networked machine running `celeryd`.  This can be one ormore machines depending on the workload.The result of the task can be stored for later retrieval (called its"tombstone")... _celery-example:Example=======You probably want to see some code by now, so here's an example taskadding two numbers:.. code-block:: python    from celery.task import task    @task    def add(x, y):        return x + yYou can execute the task in the background, or wait for it to finish::    >>> result = add.delay(4, 4)    >>> result.wait() # wait for and return the result    8Simple!.. _celery-features:Features========    +-----------------+----------------------------------------------------+    | Messaging       | Supported brokers include `RabbitMQ`_, `Redis`_,   |    |                 | `Beanstalk`_, `MongoDB`_, `CouchDB`_, and popular  |    |                 | SQL databases.                                     |    +-----------------+----------------------------------------------------+    | Fault-tolerant  | Excellent configurable error recovery when using   |    |                 | `RabbitMQ`, ensures your tasks are never lost.     |    |                 | scenarios, and your tasks will never be lost.      |    +-----------------+----------------------------------------------------+    | Distributed     | Runs on one or more machines. Supports             |    |                 | broker `clustering`_ and `HA`_ when used in        |    |                 | combination with `RabbitMQ`_.  You can set up new  |    |                 | workers without central configuration (e.g. use    |    |                 | your grandma's laptop to help if the queue is      |    |                 | temporarily congested).                            |    +-----------------+----------------------------------------------------+    | Concurrency     | Concurrency is achieved by using multiprocessing,  |    |                 | `Eventlet`_, `gevent` or a mix of these.           |    +-----------------+----------------------------------------------------+    | Scheduling      | Supports recurring tasks like cron, or specifying  |    |                 | an exact date or countdown for when after the task |    |                 | should be executed.                                |    +-----------------+----------------------------------------------------+    | Latency         | Low latency means you are able to execute tasks    |    |                 | *while the user is waiting*.                       |    +-----------------+----------------------------------------------------+    | Return Values   | Task return values can be saved to the selected    |    |                 | result store backend. You can wait for the result, |    |                 | retrieve it later, or ignore it.                   |    +-----------------+----------------------------------------------------+    | Result Stores   | Database, `MongoDB`_, `Redis`_, `Tokyo Tyrant`,    |    |                 | `Cassandra`, or `AMQP`_ (message notification).    |    +-----------------+----------------------------------------------------+    | Webhooks        | Your tasks can also be HTTP callbacks, enabling    |    |                 | cross-language communication.                      |    +-----------------+----------------------------------------------------+    | Rate limiting   | Supports rate limiting by using the token bucket   |    |                 | algorithm, which accounts for bursts of traffic.   |    |                 | Rate limits can be set for each task type, or      |    |                 | globally for all.                                  |    +-----------------+----------------------------------------------------+    | Routing         | Using AMQP's flexible routing model you can route  |    |                 | tasks to different workers, or select different    |    |                 | message topologies, by configuration or even at    |    |                 | runtime.                                           |    +-----------------+----------------------------------------------------+    | Remote-control  | Worker nodes can be controlled from remote by      |    |                 | using broadcast messaging.  A range of built-in    |    |                 | commands exist in addition to the ability to       |    |                 | easily define your own. (AMQP/Redis only)          |    +-----------------+----------------------------------------------------+    | Monitoring      | You can capture everything happening with the      |    |                 | workers in real-time by subscribing to events.     |    |                 | A real-time web monitor is in development.         |    +-----------------+----------------------------------------------------+    | Serialization   | Supports Pickle, JSON, YAML, or easily defined     |    |                 | custom schemes. One task invocation can have a     |    |                 | different scheme than another.                     |    +-----------------+----------------------------------------------------+    | Tracebacks      | Errors and tracebacks are stored and can be        |    |                 | investigated after the fact.                       |    +-----------------+----------------------------------------------------+    | UUID            | Every task has an UUID (Universally Unique         |    |                 | Identifier), which is the task id used to query    |    |                 | task status and return value.                      |    +-----------------+----------------------------------------------------+    | Retries         | Tasks can be retried if they fail, with            |    |                 | configurable maximum number of retries, and delays |    |                 | between each retry.                                |    +-----------------+----------------------------------------------------+    | Task Sets       | A Task set is a task consisting of several         |    |                 | sub-tasks. You can find out how many, or if all    |    |                 | of the sub-tasks has been executed, and even       |    |                 | retrieve the results in order. Progress bars,      |    |                 | anyone?                                            |    +-----------------+----------------------------------------------------+    | Made for Web    | You can query status and results via URLs,         |    |                 | enabling the ability to poll task status using     |    |                 | Ajax.                                              |    +-----------------+----------------------------------------------------+    | Error E-mails   | Can be configured to send e-mails to the           |    |                 | administrators when tasks fails.                   |    +-----------------+----------------------------------------------------+.. _`clustering`: http://www.rabbitmq.com/clustering.html.. _`HA`: http://www.rabbitmq.com/pacemaker.html.. _`AMQP`: http://www.amqp.org/.. _`Stomp`: http://stomp.codehaus.org/.. _`Tokyo Tyrant`: http://tokyocabinet.sourceforge.net/.. _celery-documentation:Documentation=============The `latest documentation`_ with user guides, tutorials and API referenceis hosted at Github... _`latest documentation`: http://ask.github.com/celery/.. _celery-installation:Installation============You can install Celery either via the Python Package Index (PyPI)or from source.To install using `pip`,::    $ pip install CeleryTo install using `easy_install`,::    $ easy_install Celery.. _celery-installing-from-source:Downloading and installing from source--------------------------------------Download the latest version of Celery fromhttp://pypi.python.org/pypi/celery/You can install it by doing the following,::    $ tar xvfz celery-0.0.0.tar.gz    $ cd celery-0.0.0    $ python setup.py build    # python setup.py install # as root.. _celery-installing-from-git:Using the development version-----------------------------You can clone the repository by doing the following::    $ git clone git://github.com/ask/celery.git
 |