README.rst 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. =================================
  2. celery - Distributed Task Queue
  3. =================================
  4. .. image:: http://cloud.github.com/downloads/ask/celery/celery_128.png
  5. :Version: 2.6.0rc3
  6. :Web: http://celeryproject.org/
  7. :Download: http://pypi.python.org/pypi/celery/
  8. :Source: http://github.com/ask/celery/
  9. :Keywords: task queue, job queue, asynchronous, rabbitmq, amqp, redis,
  10. python, webhooks, queue, distributed
  11. --
  12. .. contents::
  13. :local:
  14. .. _celery-synopsis:
  15. Synopsis
  16. ========
  17. Celery is an open source asynchronous task queue/job queue based on
  18. distributed message passing. It is focused on real-time operation,
  19. but supports scheduling as well.
  20. The execution units, called tasks, are executed concurrently on one or
  21. more worker nodes using multiprocessing, `Eventlet`_ or `gevent`_. Tasks can
  22. execute asynchronously (in the background) or synchronously
  23. (wait until ready).
  24. Celery is used in production systems to process millions of tasks a day.
  25. Celery is written in Python, but the protocol can be implemented in any
  26. language. It can also `operate with other languages using webhooks`_.
  27. There's also `RCelery` for the Ruby programming language, and a `PHP client`.
  28. The recommended message broker is `RabbitMQ`_, but support for
  29. `Redis`_, `MongoDB`_, `Beanstalk`_, `Amazon SQS`_, `CouchDB`_ and
  30. databases (using `SQLAlchemy`_ or the `Django ORM`_) is also available.
  31. Celery is easy to integrate with web frameworks, some of which even have
  32. integration packages:
  33. +--------------------+------------------------+
  34. | `Django`_ | `django-celery`_ |
  35. +--------------------+------------------------+
  36. | `Pyramid`_ | `pyramid_celery`_ |
  37. +--------------------+------------------------+
  38. | `Pylons`_ | `celery-pylons`_ |
  39. +--------------------+------------------------+
  40. | `Flask`_ | `flask-celery`_ |
  41. +--------------------+------------------------+
  42. | `web2py`_ | `web2py-celery`_ |
  43. +--------------------+------------------------+
  44. | `Tornado`_ | `tornado-celery`_ |
  45. +--------------------+------------------------+
  46. .. _`RCelery`: http://leapfrogdevelopment.github.com/rcelery/
  47. .. _`PHP client`: https://github.com/gjedeer/celery-php
  48. .. _`RabbitMQ`: http://www.rabbitmq.com/
  49. .. _`Redis`: http://code.google.com/p/redis/
  50. .. _`SQLAlchemy`: http://www.sqlalchemy.org/
  51. .. _`Django`: http://djangoproject.com/
  52. .. _`Django ORM`: http://djangoproject.com/
  53. .. _`Eventlet`: http://eventlet.net/
  54. .. _`gevent`: http://gevent.org/
  55. .. _`Beanstalk`: http://kr.github.com/beanstalkd/
  56. .. _`MongoDB`: http://mongodb.org/
  57. .. _`CouchDB`: http://couchdb.apache.org/
  58. .. _`Amazon SQS`: http://aws.amazon.com/sqs/
  59. .. _`Pylons`: http://pylonshq.com/
  60. .. _`Flask`: http://flask.pocoo.org/
  61. .. _`web2py`: http://web2py.com/
  62. .. _`Bottle`: http://bottlepy.org/
  63. .. _`Pyramid`: http://docs.pylonsproject.org/en/latest/docs/pyramid.html
  64. .. _`pyramid_celery`: http://pypi.python.org/pypi/pyramid_celery/
  65. .. _`django-celery`: http://pypi.python.org/pypi/django-celery
  66. .. _`celery-pylons`: http://pypi.python.org/pypi/celery-pylons
  67. .. _`flask-celery`: http://github.com/ask/flask-celery/
  68. .. _`web2py-celery`: http://code.google.com/p/web2py-celery/
  69. .. _`Tornado`: http://www.tornadoweb.org/
  70. .. _`tornado-celery`: http://github.com/mher/tornado-celery/
  71. .. _`operate with other languages using webhooks`:
  72. http://ask.github.com/celery/userguide/remote-tasks.html
  73. .. _`limited support`:
  74. http://kombu.readthedocs.org/en/latest/introduction.html#transport-comparison
  75. .. _celery-overview:
  76. Overview
  77. ========
  78. This is a high level overview of the architecture.
  79. .. image:: http://cloud.github.com/downloads/ask/celery/Celery-Overview-v4.jpg
  80. The broker delivers tasks to the worker nodes.
  81. A worker node is a networked machine running `celeryd`. This can be one or
  82. more machines depending on the workload.
  83. The result of the task can be stored for later retrieval (called its
  84. "tombstone").
  85. .. _celery-example:
  86. Example
  87. =======
  88. You probably want to see some code by now, so here's an example task
  89. adding two numbers:
  90. ::
  91. from celery import task
  92. @task
  93. def add(x, y):
  94. return x + y
  95. You can execute the task in the background, or wait for it to finish::
  96. >>> result = add.delay(4, 4)
  97. >>> result.wait() # wait for and return the result
  98. 8
  99. Simple!
  100. .. _celery-features:
  101. Features
  102. ========
  103. +-----------------+----------------------------------------------------+
  104. | Messaging | Supported brokers include `RabbitMQ`_, `Redis`_, |
  105. | | `Beanstalk`_, `MongoDB`_, `CouchDB`_, and popular |
  106. | | SQL databases. |
  107. +-----------------+----------------------------------------------------+
  108. | Fault-tolerant | Excellent configurable error recovery when using |
  109. | | `RabbitMQ`, ensures your tasks are never lost. |
  110. +-----------------+----------------------------------------------------+
  111. | Distributed | Runs on one or more machines. Supports |
  112. | | broker `clustering`_ and `HA`_ when used in |
  113. | | combination with `RabbitMQ`_. You can set up new |
  114. | | workers without central configuration (e.g. use |
  115. | | your grandma's laptop to help if the queue is |
  116. | | temporarily congested). |
  117. +-----------------+----------------------------------------------------+
  118. | Concurrency | Concurrency is achieved by using multiprocessing, |
  119. | | `Eventlet`_, `gevent` or a mix of these. |
  120. +-----------------+----------------------------------------------------+
  121. | Scheduling | Supports recurring tasks like cron, or specifying |
  122. | | an exact date or countdown for when after the task |
  123. | | should be executed. |
  124. +-----------------+----------------------------------------------------+
  125. | Latency | Low latency means you are able to execute tasks |
  126. | | *while the user is waiting*. |
  127. +-----------------+----------------------------------------------------+
  128. | Return Values | Task return values can be saved to the selected |
  129. | | result store backend. You can wait for the result, |
  130. | | retrieve it later, or ignore it. |
  131. +-----------------+----------------------------------------------------+
  132. | Result Stores | Database, `MongoDB`_, `Redis`_, `Tokyo Tyrant`, |
  133. | | `Cassandra`, or `AMQP`_ (message notification). |
  134. +-----------------+----------------------------------------------------+
  135. | Webhooks | Your tasks can also be HTTP callbacks, enabling |
  136. | | cross-language communication. |
  137. +-----------------+----------------------------------------------------+
  138. | Rate limiting | Supports rate limiting by using the token bucket |
  139. | | algorithm, which accounts for bursts of traffic. |
  140. | | Rate limits can be set for each task type, or |
  141. | | globally for all. |
  142. +-----------------+----------------------------------------------------+
  143. | Routing | Using AMQP's flexible routing model you can route |
  144. | | tasks to different workers, or select different |
  145. | | message topologies, by configuration or even at |
  146. | | runtime. |
  147. +-----------------+----------------------------------------------------+
  148. | Remote-control | Worker nodes can be controlled from remote by |
  149. | | using broadcast messaging. A range of built-in |
  150. | | commands exist in addition to the ability to |
  151. | | easily define your own. (AMQP/Redis only) |
  152. +-----------------+----------------------------------------------------+
  153. | Monitoring | You can capture everything happening with the |
  154. | | workers in real-time by subscribing to events. |
  155. | | A real-time web monitor is in development. |
  156. +-----------------+----------------------------------------------------+
  157. | Serialization | Supports Pickle, JSON, YAML, or easily defined |
  158. | | custom schemes. One task invocation can have a |
  159. | | different scheme than another. |
  160. +-----------------+----------------------------------------------------+
  161. | Tracebacks | Errors and tracebacks are stored and can be |
  162. | | investigated after the fact. |
  163. +-----------------+----------------------------------------------------+
  164. | UUID | Every task has an UUID (Universally Unique |
  165. | | Identifier), which is the task id used to query |
  166. | | task status and return value. |
  167. +-----------------+----------------------------------------------------+
  168. | Retries | Tasks can be retried if they fail, with |
  169. | | configurable maximum number of retries, and delays |
  170. | | between each retry. |
  171. +-----------------+----------------------------------------------------+
  172. | Task Sets | A Task set is a task consisting of several |
  173. | | sub-tasks. You can find out how many, or if all |
  174. | | of the sub-tasks has been executed, and even |
  175. | | retrieve the results in order. Progress bars, |
  176. | | anyone? |
  177. +-----------------+----------------------------------------------------+
  178. | Made for Web | You can query status and results via URLs, |
  179. | | enabling the ability to poll task status using |
  180. | | Ajax. |
  181. +-----------------+----------------------------------------------------+
  182. | Error Emails | Can be configured to send emails to the |
  183. | | administrators when tasks fails. |
  184. +-----------------+----------------------------------------------------+
  185. .. _`clustering`: http://www.rabbitmq.com/clustering.html
  186. .. _`HA`: http://www.rabbitmq.com/pacemaker.html
  187. .. _`AMQP`: http://www.amqp.org/
  188. .. _`Stomp`: http://stomp.codehaus.org/
  189. .. _`Tokyo Tyrant`: http://tokyocabinet.sourceforge.net/
  190. .. _celery-documentation:
  191. Documentation
  192. =============
  193. The `latest documentation`_ with user guides, tutorials and API reference
  194. is hosted at Github.
  195. .. _`latest documentation`: http://ask.github.com/celery/
  196. .. _celery-installation:
  197. Installation
  198. ============
  199. You can install Celery either via the Python Package Index (PyPI)
  200. or from source.
  201. To install using `pip`,::
  202. $ pip install -U Celery
  203. To install using `easy_install`,::
  204. $ easy_install -U Celery
  205. Bundles
  206. -------
  207. Celery also defines a group of bundles that can be used
  208. to install Celery and the dependencies for a given feature.
  209. The following bundles are available:
  210. :`celery-with-redis`_:
  211. for using Redis as a broker.
  212. :`celery-with-mongodb`_:
  213. for using MongoDB as a broker.
  214. :`django-celery-with-redis`_:
  215. for Django, and using Redis as a broker.
  216. :`django-celery-with-mongodb`_:
  217. for Django, and using MongoDB as a broker.
  218. :`bundle-celery`_:
  219. convenience bundle installing *Celery* and related packages.
  220. .. _`celery-with-redis`:
  221. http://pypi.python.org/pypi/celery-with-redis/
  222. .. _`celery-with-mongodb`:
  223. http://pypi.python.org/pypi/celery-with-mongdb/
  224. .. _`django-celery-with-redis`:
  225. http://pypi.python.org/pypi/django-celery-with-redis/
  226. .. _`django-celery-with-mongodb`:
  227. http://pypi.python.org/pypi/django-celery-with-mongdb/
  228. .. _`bundle-celery`:
  229. http://pypi.python.org/pypi/bundle-celery/
  230. .. _celery-installing-from-source:
  231. Downloading and installing from source
  232. --------------------------------------
  233. Download the latest version of Celery from
  234. http://pypi.python.org/pypi/celery/
  235. You can install it by doing the following,::
  236. $ tar xvfz celery-0.0.0.tar.gz
  237. $ cd celery-0.0.0
  238. $ python setup.py build
  239. # python setup.py install # as root
  240. .. _celery-installing-from-git:
  241. Using the development version
  242. -----------------------------
  243. You can clone the repository by doing the following::
  244. $ git clone git://github.com/ask/celery.git
  245. .. _getting-help:
  246. Getting Help
  247. ============
  248. .. _mailing-list:
  249. Mailing list
  250. ------------
  251. For discussions about the usage, development, and future of celery,
  252. please join the `celery-users`_ mailing list.
  253. .. _`celery-users`: http://groups.google.com/group/celery-users/
  254. .. _irc-channel:
  255. IRC
  256. ---
  257. Come chat with us on IRC. The `#celery`_ channel is located at the `Freenode`_
  258. network.
  259. .. _`#celery`: irc://irc.freenode.net/celery
  260. .. _`Freenode`: http://freenode.net
  261. .. _bug-tracker:
  262. Bug tracker
  263. ===========
  264. If you have any suggestions, bug reports or annoyances please report them
  265. to our issue tracker at http://github.com/ask/celery/issues/
  266. .. _wiki:
  267. Wiki
  268. ====
  269. http://wiki.github.com/ask/celery/
  270. .. _contributing-short:
  271. Contributing
  272. ============
  273. Development of `celery` happens at Github: http://github.com/ask/celery
  274. You are highly encouraged to participate in the development
  275. of `celery`. If you don't like Github (for some reason) you're welcome
  276. to send regular patches.
  277. Be sure to also read the `Contributing to Celery`_ section in the
  278. documentation.
  279. .. _`Contributing to Celery`: http://ask.github.com/celery/contributing.html
  280. .. _license:
  281. License
  282. =======
  283. This software is licensed under the `New BSD License`. See the ``LICENSE``
  284. file in the top distribution directory for the full license text.
  285. .. # vim: syntax=rst expandtab tabstop=4 shiftwidth=4 shiftround