introduction.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. :Version: 2.5.0rc2
  2. :Web: http://celeryproject.org/
  3. :Download: http://pypi.python.org/pypi/celery/
  4. :Source: http://github.com/ask/celery/
  5. :Keywords: task queue, job queue, asynchronous, rabbitmq, amqp, redis,
  6. python, webhooks, queue, distributed
  7. --
  8. .. _celery-synopsis:
  9. Celery is an open source asynchronous task queue/job queue based on
  10. distributed message passing. It is focused on real-time operation,
  11. but supports scheduling as well.
  12. The execution units, called tasks, are executed concurrently on one or
  13. more worker nodes using multiprocessing, `Eventlet`_ or `gevent`_. Tasks can
  14. execute asynchronously (in the background) or synchronously
  15. (wait until ready).
  16. Celery is used in production systems to process millions of tasks a day.
  17. Celery is written in Python, but the protocol can be implemented in any
  18. language. It can also `operate with other languages using webhooks`_.
  19. The recommended message broker is `RabbitMQ`_, but `limited support`_ for
  20. `Redis`_, `Beanstalk`_, `MongoDB`_, `CouchDB`_ and
  21. databases (using `SQLAlchemy`_ or the `Django ORM`_) is also available.
  22. Celery is easy to integrate with `Django`_, `Pylons`_ and `Flask`_, using
  23. the `django-celery`_, `celery-pylons`_ and `Flask-Celery`_ add-on packages.
  24. .. _`RabbitMQ`: http://www.rabbitmq.com/
  25. .. _`Redis`: http://code.google.com/p/redis/
  26. .. _`SQLAlchemy`: http://www.sqlalchemy.org/
  27. .. _`Django`: http://djangoproject.com/
  28. .. _`Django ORM`: http://djangoproject.com/
  29. .. _`Eventlet`: http://eventlet.net/
  30. .. _`gevent`: http://gevent.org/
  31. .. _`Beanstalk`: http://kr.github.com/beanstalkd/
  32. .. _`MongoDB`: http://mongodb.org/
  33. .. _`CouchDB`: http://couchdb.apache.org/
  34. .. _`Pylons`: http://pylonshq.com/
  35. .. _`Flask`: http://flask.pocoo.org/
  36. .. _`django-celery`: http://pypi.python.org/pypi/django-celery
  37. .. _`celery-pylons`: http://pypi.python.org/pypi/celery-pylons
  38. .. _`Flask-Celery`: http://github.com/ask/flask-celery/
  39. .. _`operate with other languages using webhooks`:
  40. http://ask.github.com/celery/userguide/remote-tasks.html
  41. .. _`limited support`:
  42. http://kombu.readthedocs.org/en/latest/introduction.html#transport-comparison
  43. .. contents::
  44. :local:
  45. .. _celery-overview:
  46. Overview
  47. ========
  48. This is a high level overview of the architecture.
  49. .. image:: http://cloud.github.com/downloads/ask/celery/Celery-Overview-v4.jpg
  50. The broker delivers tasks to the worker nodes.
  51. A worker node is a networked machine running `celeryd`. This can be one or
  52. more machines depending on the workload.
  53. The result of the task can be stored for later retrieval (called its
  54. "tombstone").
  55. .. _celery-example:
  56. Example
  57. =======
  58. You probably want to see some code by now, so here's an example task
  59. adding two numbers:
  60. .. code-block:: python
  61. from celery.task import task
  62. @task
  63. def add(x, y):
  64. return x + y
  65. You can execute the task in the background, or wait for it to finish::
  66. >>> result = add.delay(4, 4)
  67. >>> result.wait() # wait for and return the result
  68. 8
  69. Simple!
  70. .. _celery-features:
  71. Features
  72. ========
  73. +-----------------+----------------------------------------------------+
  74. | Messaging | Supported brokers include `RabbitMQ`_, `Redis`_, |
  75. | | `Beanstalk`_, `MongoDB`_, `CouchDB`_, and popular |
  76. | | SQL databases. |
  77. +-----------------+----------------------------------------------------+
  78. | Fault-tolerant | Excellent configurable error recovery when using |
  79. | | `RabbitMQ`, ensures your tasks are never lost. |
  80. +-----------------+----------------------------------------------------+
  81. | Distributed | Runs on one or more machines. Supports |
  82. | | broker `clustering`_ and `HA`_ when used in |
  83. | | combination with `RabbitMQ`_. You can set up new |
  84. | | workers without central configuration (e.g. use |
  85. | | your grandma's laptop to help if the queue is |
  86. | | temporarily congested). |
  87. +-----------------+----------------------------------------------------+
  88. | Concurrency | Concurrency is achieved by using multiprocessing, |
  89. | | `Eventlet`_, `gevent` or a mix of these. |
  90. +-----------------+----------------------------------------------------+
  91. | Scheduling | Supports recurring tasks like cron, or specifying |
  92. | | an exact date or countdown for when after the task |
  93. | | should be executed. |
  94. +-----------------+----------------------------------------------------+
  95. | Latency | Low latency means you are able to execute tasks |
  96. | | *while the user is waiting*. |
  97. +-----------------+----------------------------------------------------+
  98. | Return Values | Task return values can be saved to the selected |
  99. | | result store backend. You can wait for the result, |
  100. | | retrieve it later, or ignore it. |
  101. +-----------------+----------------------------------------------------+
  102. | Result Stores | Database, `MongoDB`_, `Redis`_, `Tokyo Tyrant`, |
  103. | | `Cassandra`, or `AMQP`_ (message notification). |
  104. +-----------------+----------------------------------------------------+
  105. | Webhooks | Your tasks can also be HTTP callbacks, enabling |
  106. | | cross-language communication. |
  107. +-----------------+----------------------------------------------------+
  108. | Rate limiting | Supports rate limiting by using the token bucket |
  109. | | algorithm, which accounts for bursts of traffic. |
  110. | | Rate limits can be set for each task type, or |
  111. | | globally for all. |
  112. +-----------------+----------------------------------------------------+
  113. | Routing | Using AMQP's flexible routing model you can route |
  114. | | tasks to different workers, or select different |
  115. | | message topologies, by configuration or even at |
  116. | | runtime. |
  117. +-----------------+----------------------------------------------------+
  118. | Remote-control | Worker nodes can be controlled from remote by |
  119. | | using broadcast messaging. A range of built-in |
  120. | | commands exist in addition to the ability to |
  121. | | easily define your own. (AMQP/Redis only) |
  122. +-----------------+----------------------------------------------------+
  123. | Monitoring | You can capture everything happening with the |
  124. | | workers in real-time by subscribing to events. |
  125. | | A real-time web monitor is in development. |
  126. +-----------------+----------------------------------------------------+
  127. | Serialization | Supports Pickle, JSON, YAML, or easily defined |
  128. | | custom schemes. One task invocation can have a |
  129. | | different scheme than another. |
  130. +-----------------+----------------------------------------------------+
  131. | Tracebacks | Errors and tracebacks are stored and can be |
  132. | | investigated after the fact. |
  133. +-----------------+----------------------------------------------------+
  134. | UUID | Every task has an UUID (Universally Unique |
  135. | | Identifier), which is the task id used to query |
  136. | | task status and return value. |
  137. +-----------------+----------------------------------------------------+
  138. | Retries | Tasks can be retried if they fail, with |
  139. | | configurable maximum number of retries, and delays |
  140. | | between each retry. |
  141. +-----------------+----------------------------------------------------+
  142. | Task Sets | A Task set is a task consisting of several |
  143. | | sub-tasks. You can find out how many, or if all |
  144. | | of the sub-tasks has been executed, and even |
  145. | | retrieve the results in order. Progress bars, |
  146. | | anyone? |
  147. +-----------------+----------------------------------------------------+
  148. | Made for Web | You can query status and results via URLs, |
  149. | | enabling the ability to poll task status using |
  150. | | Ajax. |
  151. +-----------------+----------------------------------------------------+
  152. | Error Emails | Can be configured to send emails to the |
  153. | | administrators when tasks fails. |
  154. +-----------------+----------------------------------------------------+
  155. .. _`clustering`: http://www.rabbitmq.com/clustering.html
  156. .. _`HA`: http://www.rabbitmq.com/pacemaker.html
  157. .. _`AMQP`: http://www.amqp.org/
  158. .. _`Stomp`: http://stomp.codehaus.org/
  159. .. _`Tokyo Tyrant`: http://tokyocabinet.sourceforge.net/
  160. .. _celery-documentation:
  161. Documentation
  162. =============
  163. The `latest documentation`_ with user guides, tutorials and API reference
  164. is hosted at Github.
  165. .. _`latest documentation`: http://ask.github.com/celery/
  166. .. _celery-installation:
  167. Installation
  168. ============
  169. You can install Celery either via the Python Package Index (PyPI)
  170. or from source.
  171. To install using `pip`,::
  172. $ pip install -U Celery
  173. To install using `easy_install`,::
  174. $ easy_install -U Celery
  175. Bundles
  176. -------
  177. Celery also defines a group of bundles that can be used
  178. to install Celery and the dependencies for a given feature.
  179. The following bundles are available:
  180. :`celery-with-redis`_:
  181. for using Redis as a broker.
  182. :`celery-with-mongodb`_:
  183. for using MongoDB as a broker.
  184. :`django-celery-with-redis`_:
  185. for Django, and using Redis as a broker.
  186. :`django-celery-with-mongodb`_:
  187. for Django, and using MongoDB as a broker.
  188. :`bundle-celery`_:
  189. convenience bundle installing *Celery* and related packages.
  190. .. _`celery-with-redis`:
  191. http://pypi.python.org/pypi/celery-with-redis/
  192. .. _`celery-with-mongodb`:
  193. http://pypi.python.org/pypi/celery-with-mongdb/
  194. .. _`django-celery-with-redis`:
  195. http://pypi.python.org/pypi/django-celery-with-redis/
  196. .. _`django-celery-with-mongodb`:
  197. http://pypi.python.org/pypi/django-celery-with-mongdb/
  198. .. _`bundle-celery`:
  199. http://pypi.python.org/pypi/bundle-celery/
  200. .. _celery-installing-from-source:
  201. Downloading and installing from source
  202. --------------------------------------
  203. Download the latest version of Celery from
  204. http://pypi.python.org/pypi/celery/
  205. You can install it by doing the following,::
  206. $ tar xvfz celery-0.0.0.tar.gz
  207. $ cd celery-0.0.0
  208. $ python setup.py build
  209. # python setup.py install # as root
  210. .. _celery-installing-from-git:
  211. Using the development version
  212. -----------------------------
  213. You can clone the repository by doing the following::
  214. $ git clone git://github.com/ask/celery.git