changelog.html 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Change history &mdash; Celery v0.7.0 (unstable) documentation</title>
  7. <link rel="stylesheet" href="static/nature.css" type="text/css" />
  8. <link rel="stylesheet" href="static/pygments.css" type="text/css" />
  9. <script type="text/javascript">
  10. var DOCUMENTATION_OPTIONS = {
  11. URL_ROOT: '',
  12. VERSION: '0.7.0 (unstable)',
  13. COLLAPSE_MODINDEX: false,
  14. FILE_SUFFIX: '.html',
  15. HAS_SOURCE: true
  16. };
  17. </script>
  18. <script type="text/javascript" src="static/jquery.js"></script>
  19. <script type="text/javascript" src="static/doctools.js"></script>
  20. <link rel="top" title="Celery v0.7.0 (unstable) documentation" href="index.html" />
  21. <link rel="next" title="Interesting Links" href="links.html" />
  22. <link rel="prev" title="Celery Initialize - celery.bin.celeryinit" href="reference/celery.bin.celeryinit.html" />
  23. </head>
  24. <body>
  25. <div class="related">
  26. <h3>Navigation</h3>
  27. <ul>
  28. <li class="right" style="margin-right: 10px">
  29. <a href="genindex.html" title="General Index"
  30. accesskey="I">index</a></li>
  31. <li class="right" >
  32. <a href="modindex.html" title="Global Module Index"
  33. accesskey="M">modules</a> |</li>
  34. <li class="right" >
  35. <a href="links.html" title="Interesting Links"
  36. accesskey="N">next</a> |</li>
  37. <li class="right" >
  38. <a href="reference/celery.bin.celeryinit.html" title="Celery Initialize - celery.bin.celeryinit"
  39. accesskey="P">previous</a> |</li>
  40. <li><a href="index.html">Celery v0.7.0 (unstable) documentation</a> &raquo;</li>
  41. </ul>
  42. </div>
  43. <div class="document">
  44. <div class="documentwrapper">
  45. <div class="bodywrapper">
  46. <div class="body">
  47. <div class="section" id="change-history">
  48. <h1>Change history<a class="headerlink" href="#change-history" title="Permalink to this headline">¶</a></h1>
  49. <div class="section" id="a-m-cet">
  50. <h2>0.6.0 [2009-08-07 06:54 A.M CET]<a class="headerlink" href="#a-m-cet" title="Permalink to this headline">¶</a></h2>
  51. <p><strong>IMPORTANT CHANGES</strong></p>
  52. <ul>
  53. <li><dl class="first docutils">
  54. <dt>Fixed a bug where tasks raising unpickleable exceptions crashed pool</dt>
  55. <dd><p class="first last">workers. So if you&#8217;ve had pool workers mysteriously dissapearing, or
  56. problems with celeryd stopping working, this has been fixed in this
  57. version.</p>
  58. </dd>
  59. </dl>
  60. </li>
  61. <li><p class="first">Fixed a race condition with periodic tasks.</p>
  62. </li>
  63. <li><dl class="first docutils">
  64. <dt>The task pool is now supervised, so if a pool worker crashes,</dt>
  65. <dd><p class="first last">goes away or stops responding, it is automatically replaced with
  66. a new one.</p>
  67. </dd>
  68. </dl>
  69. </li>
  70. <li><dl class="first docutils">
  71. <dt>Task.name is now automatically generated out of class module+name, e.g.</dt>
  72. <dd><p class="first last"><tt class="docutils literal"><span class="pre">&quot;djangotwitter.tasks.UpdateStatusesTask&quot;</span></tt>. Very convenient. No idea why
  73. we didn&#8217;t do this before. Some documentation is updated to not manually
  74. specify a task name.</p>
  75. </dd>
  76. </dl>
  77. </li>
  78. </ul>
  79. <p><strong>NEWS</strong></p>
  80. <ul>
  81. <li><p class="first">Tested with Django 1.1</p>
  82. </li>
  83. <li><p class="first">New Tutorial: Creating a click counter using carrot and celery</p>
  84. </li>
  85. <li><dl class="first docutils">
  86. <dt>Database entries for periodic tasks are now created at <tt class="docutils literal"><span class="pre">celeryd</span></tt></dt>
  87. <dd><p class="first last">startup instead of for each check (which has been a forgotten TODO/XXX
  88. in the code for a long time)</p>
  89. </dd>
  90. </dl>
  91. </li>
  92. <li><dl class="first docutils">
  93. <dt>New settings variable: <tt class="docutils literal"><span class="pre">CELERY_TASK_RESULT_EXPIRES</span></tt></dt>
  94. <dd><p class="first last">Time (in seconds, or a <cite>datetime.timedelta</cite> object) for when after
  95. stored task results are deleted. For the moment this only works for the
  96. database backend.</p>
  97. </dd>
  98. </dl>
  99. </li>
  100. <li><dl class="first docutils">
  101. <dt><tt class="docutils literal"><span class="pre">celeryd</span></tt> now emits a debug log message for which periodic tasks</dt>
  102. <dd><p class="first last">has been launched.</p>
  103. </dd>
  104. </dl>
  105. </li>
  106. <li><dl class="first docutils">
  107. <dt>The periodic task table is now locked for reading while getting</dt>
  108. <dd><p class="first last">periodic task status. (MySQL only so far, seeking patches for other
  109. engines)</p>
  110. </dd>
  111. </dl>
  112. </li>
  113. <li><dl class="first docutils">
  114. <dt>A lot more debugging information is now available by turning on the</dt>
  115. <dd><p class="first last"><tt class="docutils literal"><span class="pre">DEBUG</span></tt> loglevel (<tt class="docutils literal"><span class="pre">--loglevel=DEBUG</span></tt>).</p>
  116. </dd>
  117. </dl>
  118. </li>
  119. <li><p class="first">Functions/methods with a timeout argument now works correctly.</p>
  120. </li>
  121. <li><dl class="first docutils">
  122. <dt>New: <tt class="docutils literal"><span class="pre">celery.strategy.even_time_distribution</span></tt>:</dt>
  123. <dd><p class="first last">With an iterator yielding task args, kwargs tuples, evenly distribute
  124. the processing of its tasks throughout the time window available.</p>
  125. </dd>
  126. </dl>
  127. </li>
  128. <li><p class="first">Log message <tt class="docutils literal"><span class="pre">Unknown</span> <span class="pre">task</span> <span class="pre">ignored...</span></tt> now has loglevel <tt class="docutils literal"><span class="pre">ERROR</span></tt></p>
  129. </li>
  130. <li><dl class="first docutils">
  131. <dt>Log message <tt class="docutils literal"><span class="pre">&quot;Got</span> <span class="pre">task</span> <span class="pre">from</span> <span class="pre">broker&quot;</span></tt> is now emitted for all tasks, even if</dt>
  132. <dd><p class="first last">the task has an ETA (estimated time of arrival). Also the message now
  133. includes the ETA for the task (if any).</p>
  134. </dd>
  135. </dl>
  136. </li>
  137. <li><dl class="first docutils">
  138. <dt>Acknowledgement now happens in the pool callback. Can&#8217;t do ack in the job</dt>
  139. <dd><p class="first last">target, as it&#8217;s not pickleable (can&#8217;t share AMQP connection, etc)).</p>
  140. </dd>
  141. </dl>
  142. </li>
  143. <li><p class="first">Added note about .delay hanging in README</p>
  144. </li>
  145. <li><p class="first">Tests now passing in Django 1.1</p>
  146. </li>
  147. <li><p class="first">Fixed discovery to make sure app is in INSTALLED_APPS</p>
  148. </li>
  149. <li><dl class="first docutils">
  150. <dt>Previously overrided pool behaviour (process reap, wait until pool worker</dt>
  151. <dd><p class="first last">available, etc.) is now handled by <tt class="docutils literal"><span class="pre">multiprocessing.Pool</span></tt> itself.</p>
  152. </dd>
  153. </dl>
  154. </li>
  155. <li><p class="first">Convert statistics data to unicode for use as kwargs. Thanks Lucy!</p>
  156. </li>
  157. </ul>
  158. </div>
  159. <div class="section" id="p-m-cet">
  160. <h2>0.4.1 [2009-07-02 01:42 P.M CET]<a class="headerlink" href="#p-m-cet" title="Permalink to this headline">¶</a></h2>
  161. <ul class="simple">
  162. <li>Fixed a bug with parsing the message options (<tt class="docutils literal"><span class="pre">mandatory</span></tt>,
  163. <tt class="docutils literal"><span class="pre">routing_key</span></tt>, <tt class="docutils literal"><span class="pre">priority</span></tt>, <tt class="docutils literal"><span class="pre">immediate</span></tt>)</li>
  164. </ul>
  165. </div>
  166. <div class="section" id="id1">
  167. <h2>0.4.0 [2009-07-01 07:29 P.M CET]<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2>
  168. <ul class="simple">
  169. <li>Adds eager execution. <tt class="docutils literal"><span class="pre">celery.execute.apply``|``Task.apply</span></tt> executes the
  170. function blocking until the task is done, for API compatiblity it
  171. returns an <tt class="docutils literal"><span class="pre">celery.result.EagerResult</span></tt> instance. You can configure
  172. celery to always run tasks locally by setting the
  173. <tt class="docutils literal"><span class="pre">CELERY_ALWAYS_EAGER</span></tt> setting to <tt class="xref docutils literal"><span class="pre">True</span></tt>.</li>
  174. <li>Now depends on <tt class="docutils literal"><span class="pre">anyjson</span></tt>.</li>
  175. <li>99% coverage using python <tt class="docutils literal"><span class="pre">coverage</span></tt> 3.0.</li>
  176. </ul>
  177. </div>
  178. <div class="section" id="id2">
  179. <h2>0.3.20 [2009-06-25 08:42 P.M CET]<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
  180. <ul>
  181. <li><p class="first">New arguments to <tt class="docutils literal"><span class="pre">apply_async</span></tt> (the advanced version of
  182. <tt class="docutils literal"><span class="pre">delay_task</span></tt>), <tt class="docutils literal"><span class="pre">countdown</span></tt> and <tt class="docutils literal"><span class="pre">eta</span></tt>;</p>
  183. <blockquote>
  184. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="c"># Run 10 seconds into the future.</span>
  185. <span class="gp">&gt;&gt;&gt; </span><span class="n">res</span> <span class="o">=</span> <span class="n">apply_async</span><span class="p">(</span><span class="n">MyTask</span><span class="p">,</span> <span class="n">countdown</span><span class="o">=</span><span class="mf">10</span><span class="p">);</span>
  186. </pre></div>
  187. </div>
  188. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="c"># Run 1 day from now</span>
  189. <span class="gp">&gt;&gt;&gt; </span><span class="n">res</span> <span class="o">=</span> <span class="n">apply_async</span><span class="p">(</span><span class="n">MyTask</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span>
  190. <span class="gp">... </span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mf">1</span><span class="p">)</span>
  191. </pre></div>
  192. </div>
  193. </blockquote>
  194. </li>
  195. <li><p class="first">Now unlinks the pidfile if it&#8217;s stale.</p>
  196. </li>
  197. <li><p class="first">Lots of more tests.</p>
  198. </li>
  199. <li><p class="first">Now compatible with carrot &gt;= 0.5.0.</p>
  200. </li>
  201. <li><p class="first"><strong>IMPORTANT</strong> The <tt class="docutils literal"><span class="pre">subtask_ids</span></tt> attribute on the <tt class="docutils literal"><span class="pre">TaskSetResult</span></tt>
  202. instance has been removed. To get this information instead use:</p>
  203. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">subtask_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">subtask</span><span class="o">.</span><span class="n">task_id</span> <span class="k">for</span> <span class="n">subtask</span> <span class="ow">in</span> <span class="n">ts_res</span><span class="o">.</span><span class="n">subtasks</span><span class="p">]</span>
  204. </pre></div>
  205. </div>
  206. </li>
  207. <li><p class="first"><tt class="docutils literal"><span class="pre">Taskset.run()</span></tt> now respects extra message options from the task class.</p>
  208. </li>
  209. <li><p class="first">Task: Add attribute <tt class="docutils literal"><span class="pre">ignore_result</span></tt>: Don&#8217;t store the status and
  210. return value. This means you can&#8217;t use the
  211. <tt class="docutils literal"><span class="pre">celery.result.AsyncResult</span></tt> to check if the task is
  212. done, or get its return value. Only use if you need the performance
  213. and is able live without these features. Any exceptions raised will
  214. store the return value/status as usual.</p>
  215. </li>
  216. <li><p class="first">Task: Add attribute <tt class="docutils literal"><span class="pre">disable_error_emails</span></tt> to disable sending error
  217. emails for that task.</p>
  218. </li>
  219. <li><p class="first">Should now work on Windows (although running in the background won&#8217;t
  220. work, so using the <tt class="docutils literal"><span class="pre">--detach</span></tt> argument results in an exception
  221. being raised.)</p>
  222. </li>
  223. <li><p class="first">Added support for statistics for profiling and monitoring.
  224. To start sending statistics start <tt class="docutils literal"><span class="pre">celeryd</span></tt> with the
  225. <tt class="docutils literal"><span class="pre">--statistics</span></tt> option. Then after a while you can dump the results
  226. by running <tt class="docutils literal"><span class="pre">python</span> <span class="pre">manage.py</span> <span class="pre">celerystats</span></tt>. See
  227. <tt class="docutils literal"><span class="pre">celery.monitoring</span></tt> for more information.</p>
  228. </li>
  229. <li><p class="first">The celery daemon can now be supervised (i.e it is automatically
  230. restarted if it crashes). To use this start celeryd with the
  231. <tt class="docutils literal"><span class="pre">--supervised</span></tt> option (or alternatively <tt class="docutils literal"><span class="pre">-S</span></tt>).</p>
  232. </li>
  233. <li><p class="first">views.apply: View applying a task. Example:</p>
  234. <div class="highlight-python"><pre>http://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&amp;kwarg2=b</pre>
  235. </div>
  236. <p><strong>NOTE</strong> Use with caution, preferably not make this publicly
  237. accessible without ensuring your code is safe!</p>
  238. </li>
  239. <li><p class="first">Refactored <tt class="docutils literal"><span class="pre">celery.task</span></tt>. It&#8217;s now split into three modules:</p>
  240. <ul>
  241. <li><p class="first">celery.task</p>
  242. <blockquote>
  243. <p>Contains <tt class="docutils literal"><span class="pre">apply_async</span></tt>, <tt class="docutils literal"><span class="pre">delay_task</span></tt>, <tt class="docutils literal"><span class="pre">discard_all</span></tt>, and task
  244. shortcuts, plus imports objects from <tt class="docutils literal"><span class="pre">celery.task.base</span></tt> and
  245. <tt class="docutils literal"><span class="pre">celery.task.builtins</span></tt></p>
  246. </blockquote>
  247. </li>
  248. <li><p class="first">celery.task.base</p>
  249. <blockquote>
  250. <p>Contains task base classes: <tt class="docutils literal"><span class="pre">Task</span></tt>, <tt class="docutils literal"><span class="pre">PeriodicTask</span></tt>,
  251. <tt class="docutils literal"><span class="pre">TaskSet</span></tt>, <tt class="docutils literal"><span class="pre">AsynchronousMapTask</span></tt>, <tt class="docutils literal"><span class="pre">ExecuteRemoteTask</span></tt>.</p>
  252. </blockquote>
  253. </li>
  254. <li><p class="first">celery.task.builtins</p>
  255. <blockquote>
  256. <p>Built-in tasks: <tt class="docutils literal"><span class="pre">PingTask</span></tt>, <tt class="docutils literal"><span class="pre">DeleteExpiredTaskMetaTask</span></tt>.</p>
  257. </blockquote>
  258. </li>
  259. </ul>
  260. </li>
  261. </ul>
  262. </div>
  263. <div class="section" id="id3">
  264. <h2>0.3.7 [2008-06-16 11:41 P.M CET]<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
  265. <ul>
  266. <li><p class="first"><strong>IMPORTANT</strong> Now uses AMQP&#8217;s <tt class="docutils literal"><span class="pre">basic.consume</span></tt> instead of
  267. <tt class="docutils literal"><span class="pre">basic.get</span></tt>. This means we&#8217;re no longer polling the broker for
  268. new messages.</p>
  269. </li>
  270. <li><p class="first"><strong>IMPORTANT</strong> Default concurrency limit is now set to the number of CPUs
  271. available on the system.</p>
  272. </li>
  273. <li><p class="first"><strong>IMPORTANT</strong> <tt class="docutils literal"><span class="pre">tasks.register</span></tt>: Renamed <tt class="docutils literal"><span class="pre">task_name</span></tt> argument to
  274. <tt class="docutils literal"><span class="pre">name</span></tt>, so</p>
  275. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">tasks</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">task_name</span><span class="o">=</span><span class="s">&quot;mytask&quot;</span><span class="p">)</span>
  276. </pre></div>
  277. </div>
  278. <p>has to be replaced with:</p>
  279. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">tasks</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">&quot;mytask&quot;</span><span class="p">)</span>
  280. </pre></div>
  281. </div>
  282. </li>
  283. <li><p class="first">The daemon now correctly runs if the pidlock is stale.</p>
  284. </li>
  285. <li><p class="first">Now compatible with carrot 0.4.5</p>
  286. </li>
  287. <li><p class="first">Default AMQP connnection timeout is now 4 seconds.</p>
  288. </li>
  289. <li><p class="first"><tt class="docutils literal"><span class="pre">AsyncResult.read()</span></tt> was always returning <tt class="xref docutils literal"><span class="pre">True</span></tt>.</p>
  290. </li>
  291. <li><p class="first">Only use README as long_description if the file exists so easy_install
  292. doesn&#8217;t break.</p>
  293. </li>
  294. <li><p class="first"><tt class="docutils literal"><span class="pre">celery.view</span></tt>: JSON responses now properly set its mime-type.</p>
  295. </li>
  296. <li><p class="first"><tt class="docutils literal"><span class="pre">apply_async</span></tt> now has a <tt class="docutils literal"><span class="pre">connection</span></tt> keyword argument so you
  297. can re-use the same AMQP connection if you want to execute
  298. more than one task.</p>
  299. </li>
  300. <li><p class="first">Handle failures in task_status view such that it won&#8217;t throw 500s.</p>
  301. </li>
  302. <li><p class="first">Fixed typo <tt class="docutils literal"><span class="pre">AMQP_SERVER</span></tt> in documentation to <tt class="docutils literal"><span class="pre">AMQP_HOST</span></tt>.</p>
  303. </li>
  304. <li><p class="first">Worker exception e-mails sent to admins now works properly.</p>
  305. </li>
  306. <li><p class="first">No longer depends on <tt class="docutils literal"><span class="pre">django</span></tt>, so installing <tt class="docutils literal"><span class="pre">celery</span></tt> won&#8217;t affect
  307. the preferred Django version installed.</p>
  308. </li>
  309. <li><p class="first">Now works with PostgreSQL (psycopg2) again by registering the
  310. <tt class="docutils literal"><span class="pre">PickledObject</span></tt> field.</p>
  311. </li>
  312. <li><p class="first"><tt class="docutils literal"><span class="pre">celeryd</span></tt>: Added <tt class="docutils literal"><span class="pre">--detach</span></tt> option as an alias to <tt class="docutils literal"><span class="pre">--daemon</span></tt>, and
  313. it&#8217;s the term used in the documentation from now on.</p>
  314. </li>
  315. <li><p class="first">Make sure the pool and periodic task worker thread is terminated
  316. properly at exit. (So <tt class="docutils literal"><span class="pre">Ctrl-C</span></tt> works again).</p>
  317. </li>
  318. <li><p class="first">Now depends on <tt class="docutils literal"><span class="pre">python-daemon</span></tt>.</p>
  319. </li>
  320. <li><p class="first">Removed dependency to <tt class="docutils literal"><span class="pre">simplejson</span></tt></p>
  321. </li>
  322. <li><p class="first">Cache Backend: Re-establishes connection for every task process
  323. if the Django cache backend is memcached/libmemcached.</p>
  324. </li>
  325. <li><p class="first">Tyrant Backend: Now re-establishes the connection for every task
  326. executed.</p>
  327. </li>
  328. </ul>
  329. </div>
  330. <div class="section" id="id4">
  331. <h2>0.3.3 [2009-06-08 01:07 P.M CET]<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
  332. <ul>
  333. <li><dl class="first docutils">
  334. <dt>The <tt class="docutils literal"><span class="pre">PeriodicWorkController</span></tt> now sleeps for 1 second between checking</dt>
  335. <dd><p class="first last">for periodic tasks to execute.</p>
  336. </dd>
  337. </dl>
  338. </li>
  339. </ul>
  340. </div>
  341. <div class="section" id="id5">
  342. <h2>0.3.2 [2009-06-08 01:07 P.M CET]<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h2>
  343. <ul class="simple">
  344. <li>celeryd: Added option <tt class="docutils literal"><span class="pre">--discard</span></tt>: Discard (delete!) all waiting
  345. messages in the queue.</li>
  346. <li>celeryd: The <tt class="docutils literal"><span class="pre">--wakeup-after</span></tt> option was not handled as a float.</li>
  347. </ul>
  348. </div>
  349. <div class="section" id="id6">
  350. <h2>0.3.1 [2009-06-08 01:07 P.M CET]<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h2>
  351. <ul class="simple">
  352. <li>The <cite>PeriodicTask`</cite> worker is now running in its own thread instead
  353. of blocking the <tt class="docutils literal"><span class="pre">TaskController</span></tt> loop.</li>
  354. <li>Default <tt class="docutils literal"><span class="pre">QUEUE_WAKEUP_AFTER</span></tt> has been lowered to <tt class="docutils literal"><span class="pre">0.1</span></tt> (was <tt class="docutils literal"><span class="pre">0.3</span></tt>)</li>
  355. </ul>
  356. </div>
  357. <div class="section" id="id7">
  358. <h2>0.3.0 [2009-06-08 12:41 P.M CET]<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h2>
  359. <p><strong>NOTE</strong> This is a development version, for the stable release, please
  360. see versions 0.2.x.</p>
  361. <p><strong>VERY IMPORTANT:</strong> Pickle is now the encoder used for serializing task
  362. arguments, so be sure to flush your task queue before you upgrade.</p>
  363. <ul>
  364. <li><p class="first"><strong>IMPORTANT</strong> TaskSet.run() now returns a celery.result.TaskSetResult
  365. instance, which lets you inspect the status and return values of a
  366. taskset as it was a single entity.</p>
  367. </li>
  368. <li><p class="first"><strong>IMPORTANT</strong> Celery now depends on carrot &gt;= 0.4.1.</p>
  369. </li>
  370. <li><p class="first">The celery daemon now sends task errors to the registered admin e-mails.
  371. To turn off this feature, set <tt class="docutils literal"><span class="pre">SEND_CELERY_TASK_ERROR_EMAILS</span></tt> to
  372. <tt class="xref docutils literal"><span class="pre">False</span></tt> in your <tt class="docutils literal"><span class="pre">settings.py</span></tt>. Thanks to Grégoire Cachet.</p>
  373. </li>
  374. <li><p class="first">You can now run the celery daemon by using <tt class="docutils literal"><span class="pre">manage.py</span></tt>:</p>
  375. <div class="highlight-python"><pre>$ python manage.py celeryd</pre>
  376. </div>
  377. <p>Thanks to Grégoire Cachet.</p>
  378. </li>
  379. <li><p class="first">Added support for message priorities, topic exchanges, custom routing
  380. keys for tasks. This means we have introduced
  381. <tt class="docutils literal"><span class="pre">celery.task.apply_async</span></tt>, a new way of executing tasks.</p>
  382. <p>You can use <tt class="docutils literal"><span class="pre">celery.task.delay</span></tt> and <tt class="docutils literal"><span class="pre">celery.Task.delay</span></tt> like usual, but
  383. if you want greater control over the message sent, you want
  384. <tt class="docutils literal"><span class="pre">celery.task.apply_async</span></tt> and <tt class="docutils literal"><span class="pre">celery.Task.apply_async</span></tt>.</p>
  385. <p>This also means the AMQP configuration has changed. Some settings has
  386. been renamed, while others are new:</p>
  387. <div class="highlight-python"><div class="highlight"><pre><span class="n">CELERY_AMQP_EXCHANGE</span>
  388. <span class="n">CELERY_AMQP_PUBLISHER_ROUTING_KEY</span>
  389. <span class="n">CELERY_AMQP_CONSUMER_ROUTING_KEY</span>
  390. <span class="n">CELERY_AMQP_CONSUMER_QUEUE</span>
  391. <span class="n">CELERY_AMQP_EXCHANGE_TYPE</span>
  392. </pre></div>
  393. </div>
  394. <p>See the entry <a class="reference external" href="http://bit.ly/celery_AMQP_routing">Can I send some tasks to only some servers?</a> in the
  395. <a class="reference external" href="http://ask.github.com/celery/faq.html">FAQ</a> for more information.</p>
  396. </li>
  397. </ul>
  398. <ul class="simple">
  399. <li>Task errors are now logged using loglevel <tt class="docutils literal"><span class="pre">ERROR</span></tt> instead of <tt class="docutils literal"><span class="pre">INFO</span></tt>,
  400. and backtraces are dumped. Thanks to Grégoire Cachet.</li>
  401. <li>Make every new worker process re-establish it&#8217;s Django DB connection,
  402. this solving the &#8220;MySQL connection died?&#8221; exceptions.
  403. Thanks to Vitaly Babiy and Jirka Vejrazka.</li>
  404. <li><strong>IMOPORTANT</strong> Now using pickle to encode task arguments. This means you
  405. now can pass complex python objects to tasks as arguments.</li>
  406. <li>Removed dependency to <tt class="docutils literal"><span class="pre">yadayada</span></tt>.</li>
  407. <li>Added a FAQ, see <tt class="docutils literal"><span class="pre">docs/faq.rst</span></tt>.</li>
  408. <li>Now converts any unicode keys in task <tt class="docutils literal"><span class="pre">kwargs</span></tt> to regular strings.
  409. Thanks Vitaly Babiy.</li>
  410. <li>Renamed the <tt class="docutils literal"><span class="pre">TaskDaemon</span></tt> to <tt class="docutils literal"><span class="pre">WorkController</span></tt>.</li>
  411. <li><tt class="docutils literal"><span class="pre">celery.datastructures.TaskProcessQueue</span></tt> is now renamed to
  412. <tt class="docutils literal"><span class="pre">celery.pool.TaskPool</span></tt>.</li>
  413. <li>The pool algorithm has been refactored for greater performance and
  414. stability.</li>
  415. </ul>
  416. </div>
  417. <div class="section" id="id8">
  418. <h2>0.2.0 [2009-05-20 05:14 P.M CET]<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h2>
  419. <ul class="simple">
  420. <li>Final release of 0.2.0</li>
  421. <li>Compatible with carrot version 0.4.0.</li>
  422. <li>Fixes some syntax errors related to fetching results
  423. from the database backend.</li>
  424. </ul>
  425. </div>
  426. <div class="section" id="pre3-2009-05-20-05-14-p-m-cet">
  427. <h2>0.2.0-pre3 [2009-05-20 05:14 P.M CET]<a class="headerlink" href="#pre3-2009-05-20-05-14-p-m-cet" title="Permalink to this headline">¶</a></h2>
  428. <ul class="simple">
  429. <li><em>Internal release</em>. Improved handling of unpickled exceptions,
  430. <tt class="docutils literal"><span class="pre">get_result</span></tt> now tries to recreate something looking like the
  431. original exception.</li>
  432. </ul>
  433. </div>
  434. <div class="section" id="pre2-2009-05-20-01-56-p-m-cet">
  435. <h2>0.2.0-pre2 [2009-05-20 01:56 P.M CET]<a class="headerlink" href="#pre2-2009-05-20-01-56-p-m-cet" title="Permalink to this headline">¶</a></h2>
  436. <ul class="simple">
  437. <li>Now handles unpickleable exceptions (like the dynimically generated
  438. subclasses of <tt class="docutils literal"><span class="pre">django.core.exception.MultipleObjectsReturned</span></tt>).</li>
  439. </ul>
  440. </div>
  441. <div class="section" id="pre1-2009-05-20-12-33-p-m-cet">
  442. <h2>0.2.0-pre1 [2009-05-20 12:33 P.M CET]<a class="headerlink" href="#pre1-2009-05-20-12-33-p-m-cet" title="Permalink to this headline">¶</a></h2>
  443. <ul class="simple">
  444. <li>It&#8217;s getting quite stable, with a lot of new features, so bump
  445. version to 0.2. This is a pre-release.</li>
  446. <li><tt class="docutils literal"><span class="pre">celery.task.mark_as_read()</span></tt> and <tt class="docutils literal"><span class="pre">celery.task.mark_as_failure()</span></tt> has
  447. been removed. Use <tt class="docutils literal"><span class="pre">celery.backends.default_backend.mark_as_read()</span></tt>,
  448. and <tt class="docutils literal"><span class="pre">celery.backends.default_backend.mark_as_failure()</span></tt> instead.</li>
  449. </ul>
  450. </div>
  451. <div class="section" id="id9">
  452. <h2>0.1.15 [2009-05-19 04:13 P.M CET]<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h2>
  453. <ul class="simple">
  454. <li>The celery daemon was leaking AMQP connections, this should be fixed,
  455. if you have any problems with too many files open (like <tt class="docutils literal"><span class="pre">emfile</span></tt>
  456. errors in <tt class="docutils literal"><span class="pre">rabbit.log</span></tt>, please contact us!</li>
  457. </ul>
  458. </div>
  459. <div class="section" id="id10">
  460. <h2>0.1.14 [2009-05-19 01:08 P.M CET]<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h2>
  461. <ul class="simple">
  462. <li>Fixed a syntax error in the <tt class="docutils literal"><span class="pre">TaskSet</span></tt> class. (No such variable
  463. <tt class="docutils literal"><span class="pre">TimeOutError</span></tt>).</li>
  464. </ul>
  465. </div>
  466. <div class="section" id="id11">
  467. <h2>0.1.13 [2009-05-19 12:36 P.M CET]<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h2>
  468. <ul>
  469. <li><p class="first">Forgot to add <tt class="docutils literal"><span class="pre">yadayada</span></tt> to install requirements.</p>
  470. </li>
  471. <li><p class="first">Now deletes all expired task results, not just those marked as done.</p>
  472. </li>
  473. <li><p class="first">Able to load the Tokyo Tyrant backend class without django
  474. configuration, can specify tyrant settings directly in the class
  475. constructor.</p>
  476. </li>
  477. <li><p class="first">Improved API documentation</p>
  478. </li>
  479. <li><p class="first">Now using the Sphinx documentation system, you can build
  480. the html documentation by doing</p>
  481. <div class="highlight-python"><pre>$ cd docs
  482. $ make html</pre>
  483. </div>
  484. <p>and the result will be in <tt class="docutils literal"><span class="pre">docs/.build/html</span></tt>.</p>
  485. </li>
  486. </ul>
  487. </div>
  488. <div class="section" id="id12">
  489. <h2>0.1.12 [2009-05-18 04:38 P.M CET]<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h2>
  490. <ul>
  491. <li><p class="first"><tt class="docutils literal"><span class="pre">delay_task()</span></tt> etc. now returns <tt class="docutils literal"><span class="pre">celery.task.AsyncResult</span></tt> object,
  492. which lets you check the result and any failure that might have
  493. happened. It kind of works like the <tt class="docutils literal"><span class="pre">multiprocessing.AsyncResult</span></tt>
  494. class returned by <tt class="docutils literal"><span class="pre">multiprocessing.Pool.map_async</span></tt>.</p>
  495. </li>
  496. <li><p class="first">Added dmap() and dmap_async(). This works like the
  497. <tt class="docutils literal"><span class="pre">multiprocessing.Pool</span></tt> versions except they are tasks
  498. distributed to the celery server. Example:</p>
  499. <blockquote>
  500. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">celery.task</span> <span class="kn">import</span> <span class="n">dmap</span>
  501. <span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">operator</span>
  502. <span class="gp">&gt;&gt;&gt; </span><span class="n">dmap</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">add</span><span class="p">,</span> <span class="p">[[</span><span class="mf">2</span><span class="p">,</span> <span class="mf">2</span><span class="p">],</span> <span class="p">[</span><span class="mf">4</span><span class="p">,</span> <span class="mf">4</span><span class="p">],</span> <span class="p">[</span><span class="mf">8</span><span class="p">,</span> <span class="mf">8</span><span class="p">]])</span>
  503. <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="mf">4</span><span class="p">,</span> <span class="mf">8</span><span class="p">,</span> <span class="mf">16</span><span class="p">]</span>
  504. </pre></div>
  505. </div>
  506. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">celery.task</span> <span class="kn">import</span> <span class="n">dmap_async</span>
  507. <span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">operator</span>
  508. <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">dmap_async</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">add</span><span class="p">,</span> <span class="p">[[</span><span class="mf">2</span><span class="p">,</span> <span class="mf">2</span><span class="p">],</span> <span class="p">[</span><span class="mf">4</span><span class="p">,</span> <span class="mf">4</span><span class="p">],</span> <span class="p">[</span><span class="mf">8</span><span class="p">,</span> <span class="mf">8</span><span class="p">]])</span>
  509. <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span><span class="o">.</span><span class="n">ready</span><span class="p">()</span>
  510. <span class="go">False</span>
  511. <span class="gp">&gt;&gt;&gt; </span><span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">1</span><span class="p">)</span>
  512. <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span><span class="o">.</span><span class="n">ready</span><span class="p">()</span>
  513. <span class="go">True</span>
  514. <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span><span class="o">.</span><span class="n">result</span>
  515. <span class="go">[4, 8, 16]</span>
  516. </pre></div>
  517. </div>
  518. </blockquote>
  519. </li>
  520. <li><p class="first">Refactored the task metadata cache and database backends, and added
  521. a new backend for Tokyo Tyrant. You can set the backend in your django
  522. settings file. e.g:</p>
  523. <div class="highlight-python"><div class="highlight"><pre><span class="n">CELERY_BACKEND</span> <span class="o">=</span> <span class="s">&quot;database&quot;</span><span class="p">;</span> <span class="c"># Uses the database</span>
  524. <span class="n">CELERY_BACKEND</span> <span class="o">=</span> <span class="s">&quot;cache&quot;</span><span class="p">;</span> <span class="c"># Uses the django cache framework</span>
  525. <span class="n">CELERY_BACKEND</span> <span class="o">=</span> <span class="s">&quot;tyrant&quot;</span><span class="p">;</span> <span class="c"># Uses Tokyo Tyrant</span>
  526. <span class="n">TT_HOST</span> <span class="o">=</span> <span class="s">&quot;localhost&quot;</span><span class="p">;</span> <span class="c"># Hostname for the Tokyo Tyrant server.</span>
  527. <span class="n">TT_PORT</span> <span class="o">=</span> <span class="mf">6657</span><span class="p">;</span> <span class="c"># Port of the Tokyo Tyrant server.</span>
  528. </pre></div>
  529. </div>
  530. </li>
  531. </ul>
  532. </div>
  533. <div class="section" id="id13">
  534. <h2>0.1.11 [2009-05-12 02:08 P.M CET]<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h2>
  535. <ul class="simple">
  536. <li>The logging system was leaking file descriptors, resulting in
  537. servers stopping with the EMFILES (too many open files) error. (fixed)</li>
  538. </ul>
  539. </div>
  540. <div class="section" id="id14">
  541. <h2>0.1.10 [2009-05-11 12:46 P.M CET]<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h2>
  542. <ul class="simple">
  543. <li>Tasks now supports both positional arguments and keyword arguments.</li>
  544. <li>Requires carrot 0.3.8.</li>
  545. <li>The daemon now tries to reconnect if the connection is lost.</li>
  546. </ul>
  547. </div>
  548. <div class="section" id="id15">
  549. <h2>0.1.8 [2009-05-07 12:27 P.M CET]<a class="headerlink" href="#id15" title="Permalink to this headline">¶</a></h2>
  550. <ul class="simple">
  551. <li>Better test coverage</li>
  552. <li>More documentation</li>
  553. <li>celeryd doesn&#8217;t emit <tt class="docutils literal"><span class="pre">Queue</span> <span class="pre">is</span> <span class="pre">empty</span></tt> message if
  554. <tt class="docutils literal"><span class="pre">settings.CELERYD_EMPTY_MSG_EMIT_EVERY</span></tt> is 0.</li>
  555. </ul>
  556. </div>
  557. <div class="section" id="id16">
  558. <h2>0.1.7 [2009-04-30 1:50 P.M CET]<a class="headerlink" href="#id16" title="Permalink to this headline">¶</a></h2>
  559. <ul class="simple">
  560. <li>Added some unittests</li>
  561. <li>Can now use the database for task metadata (like if the task has
  562. been executed or not). Set <tt class="docutils literal"><span class="pre">settings.CELERY_TASK_META</span></tt></li>
  563. <li>Can now run <tt class="docutils literal"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">test</span></tt> to run the unittests from
  564. within the <tt class="docutils literal"><span class="pre">testproj</span></tt> project.</li>
  565. <li>Can set the AMQP exchange/routing key/queue using
  566. <tt class="docutils literal"><span class="pre">settings.CELERY_AMQP_EXCHANGE</span></tt>, <tt class="docutils literal"><span class="pre">settings.CELERY_AMQP_ROUTING_KEY</span></tt>,
  567. and <tt class="docutils literal"><span class="pre">settings.CELERY_AMQP_CONSUMER_QUEUE</span></tt>.</li>
  568. </ul>
  569. </div>
  570. <div class="section" id="id17">
  571. <h2>0.1.6 [2009-04-28 2:13 P.M CET]<a class="headerlink" href="#id17" title="Permalink to this headline">¶</a></h2>
  572. <ul>
  573. <li><p class="first">Introducing <tt class="docutils literal"><span class="pre">TaskSet</span></tt>. A set of subtasks is executed and you can
  574. find out how many, or if all them, are done (excellent for progress
  575. bars and such)</p>
  576. </li>
  577. <li><p class="first">Now catches all exceptions when running <tt class="docutils literal"><span class="pre">Task.__call__</span></tt>, so the
  578. daemon doesn&#8217;t die. This does&#8217;t happen for pure functions yet, only
  579. <tt class="docutils literal"><span class="pre">Task</span></tt> classes.</p>
  580. </li>
  581. <li><p class="first"><tt class="docutils literal"><span class="pre">autodiscover()</span></tt> now works with zipped eggs.</p>
  582. </li>
  583. <li><p class="first">celeryd: Now adds curernt working directory to <tt class="docutils literal"><span class="pre">sys.path</span></tt> for
  584. convenience.</p>
  585. </li>
  586. <li><p class="first">The <tt class="docutils literal"><span class="pre">run_every</span></tt> attribute of <tt class="docutils literal"><span class="pre">PeriodicTask</span></tt> classes can now be a
  587. <tt class="docutils literal"><span class="pre">datetime.timedelta()</span></tt> object.</p>
  588. </li>
  589. <li><p class="first">celeryd: You can now set the <tt class="docutils literal"><span class="pre">DJANGO_PROJECT_DIR</span></tt> variable
  590. for <tt class="docutils literal"><span class="pre">celeryd</span></tt> and it will add that to <tt class="docutils literal"><span class="pre">sys.path</span></tt> for easy launching.</p>
  591. </li>
  592. <li><p class="first">Can now check if a task has been executed or not via HTTP.</p>
  593. </li>
  594. <li><p class="first">You can do this by including the celery <tt class="docutils literal"><span class="pre">urls.py</span></tt> into your project,</p>
  595. <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s">r&#39;^celery/$&#39;</span><span class="p">,</span> <span class="n">include</span><span class="p">(</span><span class="s">&quot;celery.urls&quot;</span><span class="p">))</span>
  596. </pre></div>
  597. </div>
  598. <p>then visiting the following url,:</p>
  599. <div class="highlight-python"><pre>http://mysite/celery/$task_id/done/</pre>
  600. </div>
  601. <p>this will return a JSON dictionary like e.g:</p>
  602. <div class="highlight-python"><pre>&gt;&gt;&gt; {"task": {"id": $task_id, "executed": true}}</pre>
  603. </div>
  604. </li>
  605. <li><p class="first"><tt class="docutils literal"><span class="pre">delay_task</span></tt> now returns string id, not <tt class="docutils literal"><span class="pre">uuid.UUID</span></tt> instance.</p>
  606. </li>
  607. <li><p class="first">Now has <tt class="docutils literal"><span class="pre">PeriodicTasks</span></tt>, to have <tt class="docutils literal"><span class="pre">cron</span></tt> like functionality.</p>
  608. </li>
  609. <li><p class="first">Project changed name from <tt class="docutils literal"><span class="pre">crunchy</span></tt> to <tt class="docutils literal"><span class="pre">celery</span></tt>. The details of
  610. the name change request is in <tt class="docutils literal"><span class="pre">docs/name_change_request.txt</span></tt>.</p>
  611. </li>
  612. </ul>
  613. </div>
  614. <div class="section" id="id18">
  615. <h2>0.1.0 [2009-04-24 11:28 A.M CET]<a class="headerlink" href="#id18" title="Permalink to this headline">¶</a></h2>
  616. <ul class="simple">
  617. <li>Initial release</li>
  618. </ul>
  619. </div>
  620. </div>
  621. </div>
  622. </div>
  623. </div>
  624. <div class="sphinxsidebar">
  625. <div class="sphinxsidebarwrapper">
  626. <h3><a href="index.html">Table Of Contents</a></h3>
  627. <ul>
  628. <li><a class="reference external" href="">Change history</a><ul>
  629. <li><a class="reference external" href="#a-m-cet">0.6.0 [2009-08-07 06:54 A.M CET]</a></li>
  630. <li><a class="reference external" href="#p-m-cet">0.4.1 [2009-07-02 01:42 P.M CET]</a></li>
  631. <li><a class="reference external" href="#id1">0.4.0 [2009-07-01 07:29 P.M CET]</a></li>
  632. <li><a class="reference external" href="#id2">0.3.20 [2009-06-25 08:42 P.M CET]</a></li>
  633. <li><a class="reference external" href="#id3">0.3.7 [2008-06-16 11:41 P.M CET]</a></li>
  634. <li><a class="reference external" href="#id4">0.3.3 [2009-06-08 01:07 P.M CET]</a></li>
  635. <li><a class="reference external" href="#id5">0.3.2 [2009-06-08 01:07 P.M CET]</a></li>
  636. <li><a class="reference external" href="#id6">0.3.1 [2009-06-08 01:07 P.M CET]</a></li>
  637. <li><a class="reference external" href="#id7">0.3.0 [2009-06-08 12:41 P.M CET]</a></li>
  638. <li><a class="reference external" href="#id8">0.2.0 [2009-05-20 05:14 P.M CET]</a></li>
  639. <li><a class="reference external" href="#pre3-2009-05-20-05-14-p-m-cet">0.2.0-pre3 [2009-05-20 05:14 P.M CET]</a></li>
  640. <li><a class="reference external" href="#pre2-2009-05-20-01-56-p-m-cet">0.2.0-pre2 [2009-05-20 01:56 P.M CET]</a></li>
  641. <li><a class="reference external" href="#pre1-2009-05-20-12-33-p-m-cet">0.2.0-pre1 [2009-05-20 12:33 P.M CET]</a></li>
  642. <li><a class="reference external" href="#id9">0.1.15 [2009-05-19 04:13 P.M CET]</a></li>
  643. <li><a class="reference external" href="#id10">0.1.14 [2009-05-19 01:08 P.M CET]</a></li>
  644. <li><a class="reference external" href="#id11">0.1.13 [2009-05-19 12:36 P.M CET]</a></li>
  645. <li><a class="reference external" href="#id12">0.1.12 [2009-05-18 04:38 P.M CET]</a></li>
  646. <li><a class="reference external" href="#id13">0.1.11 [2009-05-12 02:08 P.M CET]</a></li>
  647. <li><a class="reference external" href="#id14">0.1.10 [2009-05-11 12:46 P.M CET]</a></li>
  648. <li><a class="reference external" href="#id15">0.1.8 [2009-05-07 12:27 P.M CET]</a></li>
  649. <li><a class="reference external" href="#id16">0.1.7 [2009-04-30 1:50 P.M CET]</a></li>
  650. <li><a class="reference external" href="#id17">0.1.6 [2009-04-28 2:13 P.M CET]</a></li>
  651. <li><a class="reference external" href="#id18">0.1.0 [2009-04-24 11:28 A.M CET]</a></li>
  652. </ul>
  653. </li>
  654. </ul>
  655. <h4>Previous topic</h4>
  656. <p class="topless"><a href="reference/celery.bin.celeryinit.html"
  657. title="previous chapter">Celery Initialize - celery.bin.celeryinit</a></p>
  658. <h4>Next topic</h4>
  659. <p class="topless"><a href="links.html"
  660. title="next chapter">Interesting Links</a></p>
  661. <h3>This Page</h3>
  662. <ul class="this-page-menu">
  663. <li><a href="sources/changelog.txt"
  664. rel="nofollow">Show Source</a></li>
  665. </ul>
  666. <div id="searchbox" style="display: none">
  667. <h3>Quick search</h3>
  668. <form class="search" action="search.html" method="get">
  669. <input type="text" name="q" size="18" />
  670. <input type="submit" value="Go" />
  671. <input type="hidden" name="check_keywords" value="yes" />
  672. <input type="hidden" name="area" value="default" />
  673. </form>
  674. <p class="searchtip" style="font-size: 90%">
  675. Enter search terms or a module, class or function name.
  676. </p>
  677. </div>
  678. <script type="text/javascript">$('#searchbox').show(0);</script>
  679. </div>
  680. </div>
  681. <div class="clearer"></div>
  682. </div>
  683. <div class="related">
  684. <h3>Navigation</h3>
  685. <ul>
  686. <li class="right" style="margin-right: 10px">
  687. <a href="genindex.html" title="General Index"
  688. >index</a></li>
  689. <li class="right" >
  690. <a href="modindex.html" title="Global Module Index"
  691. >modules</a> |</li>
  692. <li class="right" >
  693. <a href="links.html" title="Interesting Links"
  694. >next</a> |</li>
  695. <li class="right" >
  696. <a href="reference/celery.bin.celeryinit.html" title="Celery Initialize - celery.bin.celeryinit"
  697. >previous</a> |</li>
  698. <li><a href="index.html">Celery v0.7.0 (unstable) documentation</a> &raquo;</li>
  699. </ul>
  700. </div>
  701. <div class="footer">
  702. &copy; Copyright 2009, Ask Solem.
  703. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.2.
  704. </div>
  705. </body>
  706. </html>