changelog.html 42 KB

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