Browse Source

Fixed typo in tests & updated docs

Dmitry Malinovsky 11 years ago
parent
commit
a129efa7a2

+ 4 - 4
celery/tests/contrib/test_autoretry.py

@@ -33,7 +33,7 @@ class test_autoretry(TasksCase):
         self.assertEqual(self.autoretry_task_no_kwargs.iterations, 4)
 
     def test_autoretry(self):
-        self.autoretry_task_no_kwargs.max_retries = 3
-        self.autoretry_task_no_kwargs.iterations = 0
-        self.autoretry_task_no_kwargs.apply((1, 0))
-        self.assertEqual(self.autoretry_task_no_kwargs.iterations, 6)
+        self.autoretry_tasks.max_retries = 3
+        self.autoretry_task.iterations = 0
+        self.autoretry_task.apply((1, 0))
+        self.assertEqual(self.autoretry_task.iterations, 6)

+ 4 - 4
celery/tests/tasks/test_tasks.py

@@ -213,10 +213,10 @@ class test_task_retries(TasksCase):
         self.assertEqual(self.autoretry_task_no_kwargs.iterations, 4)
 
     def test_autoretry(self):
-        self.autoretry_task_no_kwargs.max_retries = 3
-        self.autoretry_task_no_kwargs.iterations = 0
-        self.autoretry_task_no_kwargs.apply((1, 0))
-        self.assertEqual(self.autoretry_task_no_kwargs.iterations, 6)
+        self.autoretry_task.max_retries = 3
+        self.autoretry_task.iterations = 0
+        self.autoretry_task.apply((1, 0))
+        self.assertEqual(self.autoretry_task.iterations, 6)
 
 
 class test_canvas_utils(TasksCase):

+ 49 - 0
docs/userguide/tasks.rst

@@ -470,6 +470,55 @@ override this default.
             raise self.retry(exc=exc, countdown=60)  # override the default and
                                                      # retry in 1 minute
 
+Autoretrying
+------------
+
+.. versionadded:: 3.2
+
+Sometimes you may want to retry a task on particular exception. To do so,
+you should wrap a task body with `try-except` statement, for example:
+
+.. code-block:: python
+
+    @app.task
+    def div(a, b):
+        try:
+            return a / b
+        except ZeroDivisionError as exc:
+            raise div.retry(exc=exc)
+
+This may not be acceptable all the time, since you may have a lot of such
+tasks.
+
+Fortunately, you can tell Celery to automatically retry a task using
+:func:`autoretry <~celery.contrib.autoretry.autoretry>` decorator:
+
+.. code-block:: python
+
+    @autoretry(on=(ZeroDivisionError,))
+    @app.task
+    def div(a, b):
+        return a / b
+
+Also you can specify autoretry directly in `~@Celery.task` decorator:
+
+.. code-block:: python
+
+    @app.task(autoretry_on=(ZeroDivisionError,))
+    def div(a, b):
+        return a / b
+
+If you want to specify custom arguments for internal `~@Task.retry`
+call, pass `retry_kwargs` argument to :func:`autoretry
+<~celery.contrib.autoretry.autoretry>` or `~@Celery.task` decorators:
+
+.. code-block:: python
+
+    @app.task(autoretry_on=(ZeroDivisionError,),
+              retry_kwargs={'max_retries': 5})
+    def div(a, b):
+        return a / b
+
 .. _task-options:
 
 List of Options