Changelog 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. ==============
  2. Change history
  3. ==============
  4. x.x.x [xxxx-xx-xx xx:xx P.M CET]
  5. -----------------------------------------------
  6. * **IMPORTANT** The ``subtask_ids`` attribute on the ``TaskSetResult``
  7. instance has been removed. To get this information instead use:
  8. >>> subtask_ids = [subtask.task_id for subtask in ts_res.subtasks]
  9. * Taskset.run() now respects extra message options from the task class.
  10. * Should now work on Windows (although running in the background won't
  11. work, so using the ``--detach`` argument results in an exception
  12. being raised.)
  13. 0.3.7 [2008-06-16 11:41 P.M CET]
  14. -----------------------------------------------
  15. * **IMPORTANT** Now uses AMQP's ``basic.consume`` instead of
  16. ``basic.get``. This means we're no longer polling the broker for
  17. new messages.
  18. * **IMPORTANT** Default concurrency limit is now set to the number of CPUs
  19. available on the system.
  20. * **IMPORTANT** ``tasks.register``: Renamed ``task_name`` argument to
  21. ``name``, so
  22. >>> tasks.register(func, task_name="mytask")
  23. has to be replaced with:
  24. >>> tasks.register(func, name="mytask")
  25. * The daemon now correctly runs if the pidlock is stale.
  26. * Now compatible with carrot 0.4.5
  27. * Default AMQP connnection timeout is now 4 seconds.
  28. * ``AsyncResult.read()`` was always returning ``True``.
  29. * Only use README as long_description if the file exists so easy_install
  30. doesn't break.
  31. * ``celery.view``: JSON responses now properly set its mime-type.
  32. * ``apply_async`` now has a ``connection`` keyword argument so you
  33. can re-use the same AMQP connection if you want to execute
  34. more than one task.
  35. * Handle failures in task_status view such that it won't throw 500s.
  36. * Fixed typo ``AMQP_SERVER`` in documentation to ``AMQP_HOST``.
  37. * Worker exception e-mails sent to admins now works properly.
  38. * No longer depends on ``django``, so installing ``celery`` won't affect
  39. the preferred Django version installed.
  40. * Now works with PostgreSQL (psycopg2) again by registering the
  41. ``PickledObject`` field.
  42. * ``celeryd``: Added ``--detach`` option as an alias to ``--daemon``, and
  43. it's the term used in the documentation from now on.
  44. * Make sure the pool and periodic task worker thread is terminated
  45. properly at exit. (So ``Ctrl-C`` works again).
  46. * Now depends on ``python-daemon``.
  47. * Removed dependency to ``simplejson``
  48. * Cache Backend: Re-establishes connection for every task process
  49. if the Django cache backend is memcached/libmemcached.
  50. * Tyrant Backend: Now re-establishes the connection for every task
  51. executed.
  52. 0.3.3 [2009-06-08 01:07 P.M CET]
  53. -----------------------------------------------
  54. * The ``PeriodicWorkController`` now sleeps for 1 second between checking
  55. for periodic tasks to execute.
  56. 0.3.2 [2009-06-08 01:07 P.M CET]
  57. -----------------------------------------------
  58. * celeryd: Added option ``--discard``: Discard (delete!) all waiting
  59. messages in the queue.
  60. * celeryd: The ``--wakeup-after`` option was not handled as a float.
  61. 0.3.1 [2009-06-08 01:07 P.M CET]
  62. -----------------------------------------------
  63. * The `PeriodicTask`` worker is now running in its own thread instead
  64. of blocking the ``TaskController`` loop.
  65. * Default ``QUEUE_WAKEUP_AFTER`` has been lowered to ``0.1`` (was ``0.3``)
  66. 0.3.0 [2009-06-08 12:41 P.M CET]
  67. -----------------------------------------------
  68. **NOTE** This is a development version, for the stable release, please
  69. see versions 0.2.x.
  70. **VERY IMPORTANT:** Pickle is now the encoder used for serializing task
  71. arguments, so be sure to flush your task queue before you upgrade.
  72. * **IMPORTANT** TaskSet.run() now returns a celery.result.TaskSetResult
  73. instance, which lets you inspect the status and return values of a
  74. taskset as it was a single entity.
  75. * **IMPORTANT** Celery now depends on carrot >= 0.4.1.
  76. * The celery daemon now sends task errors to the registered admin e-mails.
  77. To turn off this feature, set ``SEND_CELERY_TASK_ERROR_EMAILS`` to
  78. ``False`` in your ``settings.py``. Thanks to Grégoire Cachet.
  79. * You can now run the celery daemon by using ``manage.py``::
  80. $ python manage.py celeryd
  81. Thanks to Grégoire Cachet.
  82. * Added support for message priorities, topic exchanges, custom routing
  83. keys for tasks. This means we have introduced
  84. ``celery.task.apply_async``, a new way of executing tasks.
  85. You can use ``celery.task.delay`` and ``celery.Task.delay`` like usual, but
  86. if you want greater control over the message sent, you want
  87. ``celery.task.apply_async`` and ``celery.Task.apply_async``.
  88. This also means the AMQP configuration has changed. Some settings has
  89. been renamed, while others are new::
  90. CELERY_AMQP_EXCHANGE
  91. CELERY_AMQP_PUBLISHER_ROUTING_KEY
  92. CELERY_AMQP_CONSUMER_ROUTING_KEY
  93. CELERY_AMQP_CONSUMER_QUEUE
  94. CELERY_AMQP_EXCHANGE_TYPE
  95. See the entry `Can I send some tasks to only some servers?`_ in the
  96. `FAQ`_ for more information.
  97. .. _`Can I send some tasks to only some servers?`:
  98. http://bit.ly/celery_AMQP_routing
  99. .. _`FAQ`: http://ask.github.com/celery/faq.html
  100. * Task errors are now logged using loglevel ``ERROR`` instead of ``INFO``,
  101. and backtraces are dumped. Thanks to Grégoire Cachet.
  102. * Make every new worker process re-establish it's Django DB connection,
  103. this solving the "MySQL connection died?" exceptions.
  104. Thanks to Vitaly Babiy and Jirka Vejrazka.
  105. * **IMOPORTANT** Now using pickle to encode task arguments. This means you
  106. now can pass complex python objects to tasks as arguments.
  107. * Removed dependency on ``yadayada``.
  108. * Added a FAQ, see ``docs/faq.rst``.
  109. * Now converts any unicode keys in task ``kwargs`` to regular strings.
  110. Thanks Vitaly Babiy.
  111. * Renamed the ``TaskDaemon`` to ``WorkController``.
  112. * ``celery.datastructures.TaskProcessQueue`` is now renamed to
  113. ``celery.pool.TaskPool``.
  114. * The pool algorithm has been refactored for greater performance and
  115. stability.
  116. 0.2.0 [2009-05-20 05:14 P.M CET]
  117. ------------------------------------------------
  118. * Final release of 0.2.0
  119. * Compatible with carrot version 0.4.0.
  120. * Fixes some syntax errors related to fetching results
  121. from the database backend.
  122. 0.2.0-pre3 [2009-05-20 05:14 P.M CET]
  123. ----------------------------------------------------
  124. * *Internal release*. Improved handling of unpickled exceptions,
  125. get_result() now tries to recreate something looking like the
  126. original exception.
  127. 0.2.0-pre2 [2009-05-20 01:56 P.M CET]
  128. ----------------------------------------------------
  129. * Now handles unpickleable exceptions (like the dynimically generated
  130. subclasses of ``django.core.exception.MultipleObjectsReturned``).
  131. 0.2.0-pre1 [2009-05-20 12:33 P.M CET]
  132. ----------------------------------------------------
  133. * It's getting quite stable, with a lot of new features, so bump
  134. version to 0.2. This is a pre-release.
  135. * ``celery.task.mark_as_read()`` and ``celery.task.mark_as_failure()`` has
  136. been removed. Use ``celery.backends.default_backend.mark_as_read()``,
  137. and ``celery.backends.default_backend.mark_as_failure()`` instead.
  138. 0.1.15 [2009-05-19 04:13 P.M CET]
  139. ------------------------------------------------
  140. * The celery daemon was leaking AMQP connections, this should be fixed,
  141. if you have any problems with too many files open (like ``emfile``
  142. errors in ``rabbit.log``, please contact us!
  143. 0.1.14 [2009-05-19 01:08 P.M CET]
  144. ------------------------------------------------
  145. * Fixed a syntax error in the ``TaskSet`` class. (No such variable
  146. ``TimeOutError``).
  147. 0.1.13 [2009-05-19 12:36 P.M CET]
  148. ------------------------------------------------
  149. * Forgot to add ``yadayada`` to install requirements.
  150. * Now deletes all expired task results, not just those marked as done.
  151. * Able to load the Tokyo Tyrant backend class without django
  152. configuration, can specify tyrant settings directly in the class
  153. constructor.
  154. * Improved API documentation
  155. * Now using the Sphinx documentation system, you can build
  156. the html documentation by doing ::
  157. $ cd docs
  158. $ make html
  159. and the result will be in ``docs/.build/html``.
  160. 0.1.12 [2009-05-18 04:38 P.M CET]
  161. ------------------------------------------------
  162. * ``delay_task()`` etc. now returns ``celery.task.AsyncResult`` object,
  163. which lets you check the result and any failure that might have
  164. happened. It kind of works like the ``multiprocessing.AsyncResult``
  165. class returned by ``multiprocessing.Pool.map_async``.
  166. * Added dmap() and dmap_async(). This works like the
  167. ``multiprocessing.Pool`` versions except they are tasks
  168. distributed to the celery server. Example:
  169. >>> from celery.task import dmap
  170. >>> import operator
  171. >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]])
  172. >>> [4, 8, 16]
  173. >>> from celery.task import dmap_async
  174. >>> import operator
  175. >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]])
  176. >>> result.ready()
  177. False
  178. >>> time.sleep(1)
  179. >>> result.ready()
  180. True
  181. >>> result.result
  182. [4, 8, 16]
  183. * Refactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g
  184. CELERY_BACKEND = "database"; # Uses the database
  185. CELERY_BACKEND = "cache"; # Uses the django cache framework
  186. CELERY_BACKEND = "tyrant"; # Uses Tokyo Tyrant
  187. TT_HOST = "localhost"; # Hostname for the Tokyo Tyrant server.
  188. TT_PORT = 6657; # Port of the Tokyo Tyrant server.
  189. 0.1.11 [2009-05-12 02:08 P.M CET]
  190. -------------------------------------------------
  191. * The logging system was leaking file descriptors, resulting in
  192. servers stopping with the EMFILES (too many open files) error. (fixed)
  193. 0.1.10 [2009-05-11 12:46 P.M CET]
  194. -------------------------------------------------
  195. * Tasks now supports both positional arguments and keyword arguments.
  196. * Requires carrot 0.3.8.
  197. * The daemon now tries to reconnect if the connection is lost.
  198. 0.1.8 [2009-05-07 12:27 P.M CET]
  199. ------------------------------------------------
  200. * Better test coverage
  201. * More documentation
  202. * celeryd doesn't emit ``Queue is empty`` message if
  203. ``settings.CELERYD_EMPTY_MSG_EMIT_EVERY`` is 0.
  204. 0.1.7 [2009-04-30 1:50 P.M CET]
  205. -----------------------------------------------
  206. * Added some unittests
  207. * Can now use the database for task metadata (like if the task has
  208. been executed or not). Set ``settings.CELERY_TASK_META``
  209. * Can now run ``python setup.py test`` to run the unittests from
  210. within the ``testproj`` project.
  211. * Can set the AMQP exchange/routing key/queue using
  212. ``settings.CELERY_AMQP_EXCHANGE``, ``settings.CELERY_AMQP_ROUTING_KEY``,
  213. and ``settings.CELERY_AMQP_CONSUMER_QUEUE``.
  214. 0.1.6 [2009-04-28 2:13 P.M CET]
  215. -----------------------------------------------
  216. * Introducing ``TaskSet``. A set of subtasks is executed and you can
  217. find out how many, or if all them, are done (excellent for progress bars and such)
  218. * Now catches all exceptions when running ``Task.__call__``, so the
  219. daemon doesn't die. This does't happen for pure functions yet, only
  220. ``Task`` classes.
  221. * ``autodiscover()`` now works with zipped eggs.
  222. * celeryd: Now adds curernt working directory to ``sys.path`` for
  223. convenience.
  224. * The ``run_every`` attribute of ``PeriodicTask`` classes can now be a
  225. ``datetime.timedelta()`` object.
  226. * celeryd: You can now set the ``DJANGO_PROJECT_DIR`` variable
  227. for ``celeryd`` and it will add that to ``sys.path`` for easy launching.
  228. * Can now check if a task has been executed or not via HTTP.
  229. You can do this by including the celery ``urls.py`` into your project,
  230. >>> url(r'^celery/$', include("celery.urls"))
  231. then visiting the following url,::
  232. http://mysite/celery/$task_id/done/
  233. this will return a JSON dictionary like e.g:
  234. >>> {"task": {"id": $task_id, "executed": true}}
  235. * ``delay_task`` now returns string id, not ``uuid.UUID`` instance.
  236. * Now has ``PeriodicTasks``, to have ``cron`` like functionality.
  237. * Project changed name from ``crunchy`` to ``celery``. The details of
  238. the name change request is in ``docs/name_change_request.txt``.
  239. 0.1.0 [2009-04-24 11:28 A.M CET]
  240. ------------------------------------------------
  241. * Initial release