{"title":"Tasks","version":"6.1","locale":"ga","docname":"ref/tasks","url":"/ga/6.1/ref/tasks/","canonical":"https://djangodocs.dev/ga/6.1/ref/tasks/","summary":"The Task framework provides the contract and plumbing for background work, not the engine that runs it.","html":"<h1>Tasks<a class=\"heading-anchor\" href=\"#tasks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"version-note version-added\" data-version=\"6.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<p id=\"module-django.tasks\">The Task framework provides the contract and plumbing for background work, not\nthe engine that runs it. The Tasks API defines how work is described, queued,\nand tracked, but leaves actual execution to external infrastructure.</p>\n<section id=\"task-definition\">\n<h2>Task definition<a class=\"heading-anchor\" href=\"#task-definition\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-task-decorator\">\n<h3>The <code class=\"docutils literal notranslate\">task</code> decorator<a class=\"heading-anchor\" href=\"#the-task-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.task\">\n<span class=\"sig-name descname\">task</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">priority<span class=\"o\">=</span><span class=\"default_value\">0</span></em>, <em class=\"sig-param\">queue_name<span class=\"o\">=</span><span class=\"default_value\">'default'</span></em>, <em class=\"sig-param\">backend<span class=\"o\">=</span><span class=\"default_value\">'default'</span></em>, <em class=\"sig-param\">takes_context<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.task\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">&#64;task</code> decorator defines a <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> instance. All keyword\narguments are passed directly to the backend's <code class=\"docutils literal notranslate\">task_class</code> (which\ndefaults to <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a>).</p>\n<p>The following standard arguments are supported:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">priority</code>: Sets the <a class=\"reference internal\" href=\"#django.tasks.Task.priority\" title=\"django.tasks.Task.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a> of the <code class=\"docutils literal notranslate\">Task</code>. Defaults\nto 0.</p></li>\n<li><p><code class=\"docutils literal notranslate\">queue_name</code>: Sets the <a class=\"reference internal\" href=\"#django.tasks.Task.queue_name\" title=\"django.tasks.Task.queue_name\"><code class=\"xref py py-attr docutils literal notranslate\">queue_name</code></a> of the <code class=\"docutils literal notranslate\">Task</code>.\nDefaults to <code class=\"docutils literal notranslate\">&quot;default&quot;</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">backend</code>: Sets the <a class=\"reference internal\" href=\"#django.tasks.Task.backend\" title=\"django.tasks.Task.backend\"><code class=\"xref py py-attr docutils literal notranslate\">backend</code></a> of the <code class=\"docutils literal notranslate\">Task</code>. Defaults to\n<code class=\"docutils literal notranslate\">&quot;default&quot;</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">takes_context</code>: Controls whether the <code class=\"docutils literal notranslate\">Task</code> function accepts a\n<a class=\"reference internal\" href=\"#django.tasks.TaskContext\" title=\"django.tasks.TaskContext\"><code class=\"xref py py-class docutils literal notranslate\">TaskContext</code></a>. Defaults to <code class=\"docutils literal notranslate\">False</code>. See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#task-context\"><span class=\"std std-ref\">Task context</span></a> for details.</p></li>\n</ul>\n<p>Custom Task backends may define a custom <code class=\"docutils literal notranslate\">task_class</code> that accepts\nadditional arguments. These can be passed through the <code class=\"docutils literal notranslate\">&#64;task</code> decorator:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@task</span><span class=\"p\">(</span>foo<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span> bar<span class=\"o\">=</span><span class=\"mi\">600</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_task</span><span class=\"p\">():</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"6.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>Support for passing arbitrary <code class=\"docutils literal notranslate\">**kwargs</code> to the <code class=\"docutils literal notranslate\">&#64;task</code> decorator\nis added.</p>\n</aside>\n<p>If the defined <code class=\"docutils literal notranslate\">Task</code> is not valid according to the backend,\n<a class=\"reference internal\" href=\"#django.tasks.exceptions.InvalidTask\" title=\"django.tasks.exceptions.InvalidTask\"><code class=\"xref py py-exc docutils literal notranslate\">InvalidTask</code></a> is raised.</p>\n<p>See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#defining-tasks\"><span class=\"std std-ref\">defining tasks</span></a> for usage examples.</p>\n</dd></dl>\n\n</section>\n<section id=\"task\">\n<h3><code class=\"docutils literal notranslate\">Task</code><a class=\"heading-anchor\" href=\"#task\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Task</span><a class=\"heading-anchor\" href=\"#django.tasks.Task\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Represents a Task to be run in the background. Tasks should be defined\nusing the <a class=\"reference internal\" href=\"#django.tasks.task\" title=\"django.tasks.task\"><code class=\"xref py py-func docutils literal notranslate\">task()</code></a> decorator.</p>\n<p>Attributes of <code class=\"docutils literal notranslate\">Task</code> cannot be modified. See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#modifying-tasks\"><span class=\"std std-ref\">modifying Tasks</span></a> for details.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.priority\">\n<span class=\"sig-name descname\">priority</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.priority\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The priority of the <code class=\"docutils literal notranslate\">Task</code>. Priorities must be between -100 and 100,\nwhere larger numbers are higher priority, and will be run sooner.</p>\n<p>The backend must have <a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_priority\" title=\"django.tasks.backends.base.BaseTaskBackend.supports_priority\"><code class=\"xref py py-attr docutils literal notranslate\">supports_priority</code></a> set to <code class=\"docutils literal notranslate\">True</code> to use\nthis feature.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.backend\">\n<span class=\"sig-name descname\">backend</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.backend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The alias of the backend the <code class=\"docutils literal notranslate\">Task</code> should be enqueued to. This must\nmatch a backend defined in <a class=\"reference internal\" href=\"/ga/6.1/ref/settings/#std-setting-TASKS-BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\">BACKEND</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.queue_name\">\n<span class=\"sig-name descname\">queue_name</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.queue_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The name of the queue the <code class=\"docutils literal notranslate\">Task</code> will be enqueued on to. Defaults to\n<code class=\"docutils literal notranslate\">&quot;default&quot;</code>. This must match a queue defined in\n<a class=\"reference internal\" href=\"/ga/6.1/ref/settings/#std-setting-TASKS-QUEUES\"><code class=\"xref std std-setting docutils literal notranslate\">QUEUES</code></a>, unless\n<a class=\"reference internal\" href=\"/ga/6.1/ref/settings/#std-setting-TASKS-QUEUES\"><code class=\"xref std std-setting docutils literal notranslate\">QUEUES</code></a> is set to <code class=\"docutils literal notranslate\">[]</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.run_after\">\n<span class=\"sig-name descname\">run_after</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.run_after\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The earliest time the <code class=\"docutils literal notranslate\">Task</code> will be executed. This can be a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">timedelta</code></a>, which is used relative to the\ncurrent time, a timezone-aware <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>,\nor <code class=\"docutils literal notranslate\">None</code> if not constrained. Defaults to <code class=\"docutils literal notranslate\">None</code>.</p>\n<p>This attribute can be set using <a class=\"reference internal\" href=\"#django.tasks.Task.using\" title=\"django.tasks.Task.using\"><code class=\"xref py py-meth docutils literal notranslate\">using()</code></a>.</p>\n<p>The backend must have <a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_defer\" title=\"django.tasks.backends.base.BaseTaskBackend.supports_defer\"><code class=\"xref py py-attr docutils literal notranslate\">supports_defer</code></a> set to <code class=\"docutils literal notranslate\">True</code> to use\nthis feature. Otherwise,\n<a class=\"reference internal\" href=\"#django.tasks.exceptions.InvalidTask\" title=\"django.tasks.exceptions.InvalidTask\"><code class=\"xref py py-exc docutils literal notranslate\">InvalidTask</code></a> is raised.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.name\">\n<span class=\"sig-name descname\">name</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The name of the function decorated with <a class=\"reference internal\" href=\"#django.tasks.task\" title=\"django.tasks.task\"><code class=\"xref py py-func docutils literal notranslate\">task()</code></a>. This name is not\nnecessarily unique.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.using\">\n<span class=\"sig-name descname\">using</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">priority<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">backend<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">queue_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">run_after<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.using\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Creates a new <code class=\"docutils literal notranslate\">Task</code> with modified defaults. The existing <code class=\"docutils literal notranslate\">Task</code> is\nleft unchanged.</p>\n<p><code class=\"docutils literal notranslate\">using</code> allows modifying the following attributes:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.tasks.Task.priority\" title=\"django.tasks.Task.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.tasks.Task.backend\" title=\"django.tasks.Task.backend\"><code class=\"xref py py-attr docutils literal notranslate\">backend</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.tasks.Task.queue_name\" title=\"django.tasks.Task.queue_name\"><code class=\"xref py py-attr docutils literal notranslate\">queue_name</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.tasks.Task.run_after\" title=\"django.tasks.Task.run_after\"><code class=\"xref py py-attr docutils literal notranslate\">run_after</code></a></p></li>\n</ul>\n<p>See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#modifying-tasks\"><span class=\"std std-ref\">modifying Tasks</span></a> for usage examples.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.enqueue\">\n<span class=\"sig-name descname\">enqueue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>args</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.enqueue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Enqueues the <code class=\"docutils literal notranslate\">Task</code> to the <code class=\"docutils literal notranslate\">Task</code> backend for later execution.</p>\n<p>Arguments are passed to the <code class=\"docutils literal notranslate\">Task</code>'s function after a round-trip\nthrough a <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.dumps\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">json.dumps()</code></a>/<a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.loads\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">json.loads()</code></a> cycle. Hence, all\narguments must be JSON-serializable and preserve their type after the\nround-trip.</p>\n<p>If the <code class=\"docutils literal notranslate\">Task</code> is not valid according to the backend,\n<a class=\"reference internal\" href=\"#django.tasks.exceptions.InvalidTask\" title=\"django.tasks.exceptions.InvalidTask\"><code class=\"xref py py-exc docutils literal notranslate\">InvalidTask</code></a> is raised.</p>\n<p>See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#enqueueing-tasks\"><span class=\"std std-ref\">enqueueing Tasks</span></a> for usage examples.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.aenqueue\">\n<span class=\"sig-name descname\">aenqueue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>args</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.aenqueue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">async</code> variant of <a class=\"reference internal\" href=\"#django.tasks.Task.enqueue\" title=\"django.tasks.Task.enqueue\"><code class=\"xref py py-meth docutils literal notranslate\">enqueue</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.get_result\">\n<span class=\"sig-name descname\">get_result</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">result_id</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.get_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retrieves a result by its id.</p>\n<p>If the result does not exist, <a class=\"reference internal\" href=\"#django.tasks.exceptions.TaskResultDoesNotExist\" title=\"django.tasks.exceptions.TaskResultDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">TaskResultDoesNotExist</code></a> is raised. If the\nresult is not the same type as the current Task,\n<a class=\"reference internal\" href=\"#django.tasks.exceptions.TaskResultMismatch\" title=\"django.tasks.exceptions.TaskResultMismatch\"><code class=\"xref py py-exc docutils literal notranslate\">TaskResultMismatch</code></a>\nis raised. If the backend does not support <code class=\"docutils literal notranslate\">get_result()</code>,\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#NotImplementedError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">NotImplementedError</code></a> is raised.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.Task.aget_result\">\n<span class=\"sig-name descname\">aget_result</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>args</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.Task.aget_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">async</code> variant of <a class=\"reference internal\" href=\"#django.tasks.Task.get_result\" title=\"django.tasks.Task.get_result\"><code class=\"xref py py-meth docutils literal notranslate\">get_result</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"task-context\">\n<h2>Task context<a class=\"heading-anchor\" href=\"#task-context\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskContext\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TaskContext</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskContext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Contains context for the running <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a>. Context only passed to a\n<code class=\"docutils literal notranslate\">Task</code> if it was defined with <code class=\"docutils literal notranslate\">takes_context=True</code>.</p>\n<p>Attributes of <code class=\"docutils literal notranslate\">TaskContext</code> cannot be modified.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskContext.task_result\">\n<span class=\"sig-name descname\">task_result</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskContext.task_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.TaskResult\" title=\"django.tasks.TaskResult\"><code class=\"xref py py-class docutils literal notranslate\">TaskResult</code></a> currently being run.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskContext.attempt\">\n<span class=\"sig-name descname\">attempt</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskContext.attempt\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The number of the current execution attempts for this Task, starting at\n1.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"task-results\">\n<h2>Task results<a class=\"heading-anchor\" href=\"#task-results\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResultStatus\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TaskResultStatus</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResultStatus\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An Enum representing the status of a <a class=\"reference internal\" href=\"#django.tasks.TaskResult\" title=\"django.tasks.TaskResult\"><code class=\"xref py py-class docutils literal notranslate\">TaskResult</code></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResultStatus.READY\">\n<span class=\"sig-name descname\">READY</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResultStatus.READY\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> has just been enqueued, or is ready to be executed\nagain.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResultStatus.RUNNING\">\n<span class=\"sig-name descname\">RUNNING</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResultStatus.RUNNING\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> is currently being executed.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResultStatus.FAILED\">\n<span class=\"sig-name descname\">FAILED</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResultStatus.FAILED\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> raised an exception during execution, or was unable\nto start.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResultStatus.SUCCESSFUL\">\n<span class=\"sig-name descname\">SUCCESSFUL</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResultStatus.SUCCESSFUL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> has finished executing successfully.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TaskResult</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">TaskResult</code> stores the information about a specific execution of a\n<a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a>.</p>\n<p>Attributes of <code class=\"docutils literal notranslate\">TaskResult</code> cannot be modified.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.task\">\n<span class=\"sig-name descname\">task</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.task\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> the result was enqueued for.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.id\">\n<span class=\"sig-name descname\">id</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.id\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A unique identifier for the result, which can be passed to\n<a class=\"reference internal\" href=\"#django.tasks.Task.get_result\" title=\"django.tasks.Task.get_result\"><code class=\"xref py py-meth docutils literal notranslate\">Task.get_result()</code></a>.</p>\n<p>The format of the id will depend on the backend being used. Task result\nids are always strings less than 64 characters.</p>\n<p>See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#task-results\"><span class=\"std std-ref\">Task results</span></a> for more details.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.status\">\n<span class=\"sig-name descname\">status</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.status\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.TaskResultStatus\" title=\"django.tasks.TaskResultStatus\"><code class=\"xref py py-class docutils literal notranslate\">status</code></a> of the result.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.enqueued_at\">\n<span class=\"sig-name descname\">enqueued_at</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.enqueued_at\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The time when the <code class=\"docutils literal notranslate\">Task</code> was enqueued.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.started_at\">\n<span class=\"sig-name descname\">started_at</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.started_at\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The time when the <code class=\"docutils literal notranslate\">Task</code> began execution, on its first attempt.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.last_attempted_at\">\n<span class=\"sig-name descname\">last_attempted_at</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.last_attempted_at\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The time when the most recent <code class=\"docutils literal notranslate\">Task</code> run began execution.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.finished_at\">\n<span class=\"sig-name descname\">finished_at</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.finished_at\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The time when the <code class=\"docutils literal notranslate\">Task</code> finished execution, whether it failed or\nsucceeded.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.backend\">\n<span class=\"sig-name descname\">backend</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.backend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The backend the result is from.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.errors\">\n<span class=\"sig-name descname\">errors</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.errors\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A list of <a class=\"reference internal\" href=\"#django.tasks.TaskError\" title=\"django.tasks.TaskError\"><code class=\"xref py py-class docutils literal notranslate\">TaskError</code></a> instances for the errors raised as part of\neach execution of the Task.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.return_value\">\n<span class=\"sig-name descname\">return_value</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.return_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The return value from the <code class=\"docutils literal notranslate\">Task</code> function.</p>\n<p>If the <code class=\"docutils literal notranslate\">Task</code> did not finish successfully, <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">ValueError</code></a> is\nraised.</p>\n<p>See <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#task-return-values\"><span class=\"std std-ref\">return values</span></a> for usage examples.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.refresh\">\n<span class=\"sig-name descname\">refresh</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.refresh\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Refresh the result's attributes from the queue store.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.arefresh\">\n<span class=\"sig-name descname\">arefresh</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.arefresh\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">async</code> variant of <a class=\"reference internal\" href=\"#django.tasks.TaskResult.refresh\" title=\"django.tasks.TaskResult.refresh\"><code class=\"xref py py-meth docutils literal notranslate\">TaskResult.refresh()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.is_finished\">\n<span class=\"sig-name descname\">is_finished</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.is_finished\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Whether the <code class=\"docutils literal notranslate\">Task</code> has finished (successfully or not).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.attempts\">\n<span class=\"sig-name descname\">attempts</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.attempts\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The number of times the Task has been run.</p>\n<p>If the task is currently running, it does not count as an attempt.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskResult.worker_ids\">\n<span class=\"sig-name descname\">worker_ids</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskResult.worker_ids\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The ids of the workers which have executed the Task.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"task-errors\">\n<h3>Task errors<a class=\"heading-anchor\" href=\"#task-errors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskError\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TaskError</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskError\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Contains information about the error raised during the execution of a\n<code class=\"docutils literal notranslate\">Task</code>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskError.traceback\">\n<span class=\"sig-name descname\">traceback</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskError.traceback\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The traceback (as a string) from the raised exception when the <code class=\"docutils literal notranslate\">Task</code>\nfailed.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.TaskError.exception_class\">\n<span class=\"sig-name descname\">exception_class</span><a class=\"heading-anchor\" href=\"#django.tasks.TaskError.exception_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The exception class raised when executing the <code class=\"docutils literal notranslate\">Task</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"backends\">\n<h2>Backends<a class=\"heading-anchor\" href=\"#backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Backends handle how Tasks are stored and executed. All backends share a common\ninterface defined by <code class=\"docutils literal notranslate\">BaseTaskBackend</code>, which specifies the core methods for\nenqueueing Tasks and retrieving results.</p>\n<section id=\"module-django.tasks.backends.base\">\n<span id=\"base-backend\"></span><h3>Base backend<a class=\"heading-anchor\" href=\"#module-django.tasks.backends.base\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BaseTaskBackend</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">BaseTaskBackend</code> is the parent class for all Task backends.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.task_class\">\n<span class=\"sig-name descname\">task_class</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.task_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> subclass to use when creating tasks\nwith the <a class=\"reference internal\" href=\"#django.tasks.task\" title=\"django.tasks.task\"><code class=\"xref py py-func docutils literal notranslate\">task()</code></a> decorator. Defaults to\n<a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a>. Custom backends can override this to use\na custom <code class=\"docutils literal notranslate\">Task</code> subclass with additional attributes.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.options\">\n<span class=\"sig-name descname\">options</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.options\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A dictionary of extra parameters for the Task backend. These are\nprovided using the <a class=\"reference internal\" href=\"/ga/6.1/ref/settings/#std-setting-TASKS-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a> setting.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.enqueue\">\n<span class=\"sig-name descname\">enqueue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">task</em>, <em class=\"sig-param\">args</em>, <em class=\"sig-param\">kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.enqueue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Task backends which subclass <code class=\"docutils literal notranslate\">BaseTaskBackend</code> should implement this\nmethod as a minimum.</p>\n<p>When implemented, <code class=\"docutils literal notranslate\">enqueue()</code> enqueues the <code class=\"docutils literal notranslate\">task</code>, a <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a>\ninstance, for later execution. <code class=\"docutils literal notranslate\">args</code> are the positional arguments\nand <code class=\"docutils literal notranslate\">kwargs</code> are the keyword arguments to be passed to the <code class=\"docutils literal notranslate\">task</code>.\nReturns a <a class=\"reference internal\" href=\"#django.tasks.TaskResult\" title=\"django.tasks.TaskResult\"><code class=\"xref py py-class docutils literal notranslate\">TaskResult</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.aenqueue\">\n<span class=\"sig-name descname\">aenqueue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">task</em>, <em class=\"sig-param\">args</em>, <em class=\"sig-param\">kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.aenqueue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">async</code> variant of <a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.enqueue\" title=\"django.tasks.backends.base.BaseTaskBackend.enqueue\"><code class=\"xref py py-meth docutils literal notranslate\">BaseTaskBackend.enqueue()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.get_result\">\n<span class=\"sig-name descname\">get_result</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">result_id</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.get_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retrieve a result by its id. If the result does not exist,\n<a class=\"reference internal\" href=\"#django.tasks.exceptions.TaskResultDoesNotExist\" title=\"django.tasks.exceptions.TaskResultDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">TaskResultDoesNotExist</code></a> is raised.</p>\n<p>If the backend does not support <code class=\"docutils literal notranslate\">get_result()</code>,\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#NotImplementedError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">NotImplementedError</code></a> is raised.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.aget_result\">\n<span class=\"sig-name descname\">aget_result</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">result_id</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.aget_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <code class=\"docutils literal notranslate\">async</code> variant of <a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.get_result\" title=\"django.tasks.backends.base.BaseTaskBackend.get_result\"><code class=\"xref py py-meth docutils literal notranslate\">BaseTaskBackend.get_result()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.validate_task\">\n<span class=\"sig-name descname\">validate_task</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">task</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.validate_task\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Validates whether the provided <code class=\"docutils literal notranslate\">Task</code> is able to be enqueued using\nthe backend. If the Task is not valid,\n<a class=\"reference internal\" href=\"#django.tasks.exceptions.InvalidTask\" title=\"django.tasks.exceptions.InvalidTask\"><code class=\"xref py py-exc docutils literal notranslate\">InvalidTask</code></a>\nis raised.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"feature-flags\">\n<h4>Feature flags<a class=\"heading-anchor\" href=\"#feature-flags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Some backends may not support all features Django provides. It's possible to\nidentify the supported functionality of a backend, and potentially change\nbehavior accordingly.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.supports_defer\">\n<span class=\"sig-prename descclassname\">BaseTaskBackend.</span><span class=\"sig-name descname\">supports_defer</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_defer\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Whether the backend supports enqueueing Tasks to be executed after a\nspecific time using the <a class=\"reference internal\" href=\"#django.tasks.Task.run_after\" title=\"django.tasks.Task.run_after\"><code class=\"xref py py-attr docutils literal notranslate\">run_after</code></a> attribute.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.supports_async_task\">\n<span class=\"sig-prename descclassname\">BaseTaskBackend.</span><span class=\"sig-name descname\">supports_async_task</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_async_task\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Whether the backend supports enqueueing async functions (coroutines).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.supports_get_result\">\n<span class=\"sig-prename descclassname\">BaseTaskBackend.</span><span class=\"sig-name descname\">supports_get_result</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_get_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Whether the backend supports retrieving <code class=\"docutils literal notranslate\">Task</code> results from another\nthread after they have been enqueued.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.base.BaseTaskBackend.supports_priority\">\n<span class=\"sig-prename descclassname\">BaseTaskBackend.</span><span class=\"sig-name descname\">supports_priority</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_priority\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Whether the backend supports executing Tasks as ordered by their\n<a class=\"reference internal\" href=\"#django.tasks.Task.priority\" title=\"django.tasks.Task.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a>.</p>\n</dd></dl>\n\n<p>The below table notes which of the <a class=\"reference internal\" href=\"#task-available-backends\"><span class=\"std std-ref\">built-in backends</span></a> support which features:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Feature</p></th>\n<th class=\"head\"><p><a class=\"reference internal\" href=\"#django.tasks.backends.dummy.DummyBackend\" title=\"django.tasks.backends.dummy.DummyBackend\"><code class=\"xref py py-class docutils literal notranslate\">DummyBackend</code></a></p></th>\n<th class=\"head\"><p><a class=\"reference internal\" href=\"#django.tasks.backends.immediate.ImmediateBackend\" title=\"django.tasks.backends.immediate.ImmediateBackend\"><code class=\"xref py py-class docutils literal notranslate\">ImmediateBackend</code></a></p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_defer\" title=\"django.tasks.backends.base.BaseTaskBackend.supports_defer\"><code class=\"xref py py-attr docutils literal notranslate\">supports_defer</code></a></p></td>\n<td><p>Tá</p></td>\n<td><p>Níl</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_async_task\" title=\"django.tasks.backends.base.BaseTaskBackend.supports_async_task\"><code class=\"xref py py-attr docutils literal notranslate\">supports_async_task</code></a></p></td>\n<td><p>Tá</p></td>\n<td><p>Tá</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_get_result\" title=\"django.tasks.backends.base.BaseTaskBackend.supports_get_result\"><code class=\"xref py py-attr docutils literal notranslate\">supports_get_result</code></a></p></td>\n<td><p>Níl</p></td>\n<td><p>No <a class=\"footnote-reference brackets\" href=\"#fnimmediateresult\" id=\"id1\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>1<span class=\"fn-bracket\">]</span></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.supports_priority\" title=\"django.tasks.backends.base.BaseTaskBackend.supports_priority\"><code class=\"xref py py-attr docutils literal notranslate\">supports_priority</code></a></p></td>\n<td><p>Yes <a class=\"footnote-reference brackets\" href=\"#fndummypriority\" id=\"id2\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>2<span class=\"fn-bracket\">]</span></a></p></td>\n<td><p>Yes <a class=\"footnote-reference brackets\" href=\"#fnimmediatepriority\" id=\"id3\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>3<span class=\"fn-bracket\">]</span></a></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n</section>\n<section id=\"available-backends\">\n<span id=\"task-available-backends\"></span><h3>Available backends<a class=\"heading-anchor\" href=\"#available-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django includes only development and testing backends. These support local\nexecution and inspection, for production ready backends refer to\n<a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#configuring-a-task-backend\"><span class=\"std std-ref\">Configuring a Task backend</span></a>.</p>\n<section id=\"module-django.tasks.backends.immediate\">\n<span id=\"immediate-backend\"></span><h4>Immediate backend<a class=\"heading-anchor\" href=\"#module-django.tasks.backends.immediate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.immediate.ImmediateBackend\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ImmediateBackend</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.immediate.ImmediateBackend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#immediate-task-backend\"><span class=\"std std-ref\">immediate backend</span></a> executes Tasks\nimmediately, rather than in the background.</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.tasks.backends.dummy\">\n<span id=\"dummy-backend\"></span><h4>Dummy backend<a class=\"heading-anchor\" href=\"#module-django.tasks.backends.dummy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.dummy.DummyBackend\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DummyBackend</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.dummy.DummyBackend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The <a class=\"reference internal\" href=\"/ga/6.1/topics/tasks/#dummy-task-backend\"><span class=\"std std-ref\">dummy backend</span></a> does not execute enqueued\nTasks. Instead, it stores task results for later inspection.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.dummy.DummyBackend.results\">\n<span class=\"sig-name descname\">results</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.dummy.DummyBackend.results\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A list of results for the enqueued Tasks, in the order they were\nenqueued.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.backends.dummy.DummyBackend.clear\">\n<span class=\"sig-name descname\">clear</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.tasks.backends.dummy.DummyBackend.clear\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Clears the list of stored results.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n</section>\n<section id=\"module-django.tasks.exceptions\">\n<span id=\"exceptions\"></span><h2>Eisceachtaí<a class=\"heading-anchor\" href=\"#module-django.tasks.exceptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.exceptions.InvalidTask\">\n<em class=\"property\"><span class=\"k\">exception</span> </em><span class=\"sig-name descname\">InvalidTask</span><a class=\"heading-anchor\" href=\"#django.tasks.exceptions.InvalidTask\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Raised when the <a class=\"reference internal\" href=\"#django.tasks.Task\" title=\"django.tasks.Task\"><code class=\"xref py py-class docutils literal notranslate\">Task</code></a> attempting to be enqueued\nis invalid.</p>\n</dd></dl>\n\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.exceptions.InvalidTaskBackend\">\n<em class=\"property\"><span class=\"k\">exception</span> </em><span class=\"sig-name descname\">InvalidTaskBackend</span><a class=\"heading-anchor\" href=\"#django.tasks.exceptions.InvalidTaskBackend\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Raised when the requested <a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend\" title=\"django.tasks.backends.base.BaseTaskBackend\"><code class=\"xref py py-class docutils literal notranslate\">BaseTaskBackend</code></a> is invalid.</p>\n</dd></dl>\n\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.exceptions.TaskResultDoesNotExist\">\n<em class=\"property\"><span class=\"k\">exception</span> </em><span class=\"sig-name descname\">TaskResultDoesNotExist</span><a class=\"heading-anchor\" href=\"#django.tasks.exceptions.TaskResultDoesNotExist\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Raised by <a class=\"reference internal\" href=\"#django.tasks.backends.base.BaseTaskBackend.get_result\" title=\"django.tasks.backends.base.BaseTaskBackend.get_result\"><code class=\"xref py py-meth docutils literal notranslate\">get_result()</code></a>\nwhen the provided <code class=\"docutils literal notranslate\">result_id</code> does not exist.</p>\n</dd></dl>\n\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.tasks.exceptions.TaskResultMismatch\">\n<em class=\"property\"><span class=\"k\">exception</span> </em><span class=\"sig-name descname\">TaskResultMismatch</span><a class=\"heading-anchor\" href=\"#django.tasks.exceptions.TaskResultMismatch\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Raised by <a class=\"reference internal\" href=\"#django.tasks.Task.get_result\" title=\"django.tasks.Task.get_result\"><code class=\"xref py py-meth docutils literal notranslate\">get_result()</code></a> when the provided\n<code class=\"docutils literal notranslate\">result_id</code> is for a different Task than the current Task.</p>\n</dd></dl>\n\n<p class=\"rubric\">Fonótaí</p>\n<aside class=\"footnote-list brackets\">\n<aside class=\"footnote brackets\" id=\"fnimmediateresult\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id1\">1</a><span class=\"fn-bracket\">]</span></span>\n<p>The <a class=\"reference internal\" href=\"#django.tasks.backends.immediate.ImmediateBackend\" title=\"django.tasks.backends.immediate.ImmediateBackend\"><code class=\"xref py py-class docutils literal notranslate\">ImmediateBackend</code></a> doesn't officially\nsupport <code class=\"docutils literal notranslate\">get_result()</code>, despite implementing the API, since the result\ncannot be retrieved from a different thread.</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fndummypriority\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id2\">2</a><span class=\"fn-bracket\">]</span></span>\n<p>The <a class=\"reference internal\" href=\"#django.tasks.backends.dummy.DummyBackend\" title=\"django.tasks.backends.dummy.DummyBackend\"><code class=\"xref py py-class docutils literal notranslate\">DummyBackend</code></a> has <code class=\"docutils literal notranslate\">supports_priority=True</code>\nso that it can be used as a drop-in replacement in tests. Since this\nbackend never executes Tasks, the <code class=\"docutils literal notranslate\">priority</code> value has no effect.</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fnimmediatepriority\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id3\">3</a><span class=\"fn-bracket\">]</span></span>\n<p>The <a class=\"reference internal\" href=\"#django.tasks.backends.immediate.ImmediateBackend\" title=\"django.tasks.backends.immediate.ImmediateBackend\"><code class=\"xref py py-class docutils literal notranslate\">ImmediateBackend</code></a> has\n<code class=\"docutils literal notranslate\">supports_priority=True</code> so that it can be used as a drop-in replacement\nin tests. Because Tasks run as soon as they are scheduled, the <code class=\"docutils literal notranslate\">priority</code>\nvalue has no effect.</p>\n</aside>\n</aside>\n</section>","rootId":"tasks","toc":[{"title":"Task definition","anchor":"task-definition","children":[{"title":"The task decorator","anchor":"the-task-decorator","children":[]},{"title":"Task","anchor":"task","children":[]}]},{"title":"Task context","anchor":"task-context","children":[]},{"title":"Task results","anchor":"task-results","children":[{"title":"Task errors","anchor":"task-errors","children":[]}]},{"title":"Backends","anchor":"backends","children":[{"title":"Base backend","anchor":"module-django.tasks.backends.base","children":[{"title":"Feature flags","anchor":"feature-flags","children":[]}]},{"title":"Available backends","anchor":"available-backends","children":[{"title":"Immediate backend","anchor":"module-django.tasks.backends.immediate","children":[]},{"title":"Dummy backend","anchor":"module-django.tasks.backends.dummy","children":[]}]}]},{"title":"Eisceachtaí","anchor":"module-django.tasks.exceptions","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Tagairt API","url":"/ga/6.1/ref/"}],"prev":{"docname":"ref/signals","title":"Comharthaí","url":"/ga/6.1/ref/signals/"},"next":{"docname":"ref/templates/index","title":"Teimpléid","url":"/ga/6.1/ref/templates/"},"formats":{"html":"/ga/6.1/ref/tasks/","markdown":"/ga/6.1/ref/tasks.md","json":"/ga/6.1/ref/tasks.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/tasks.txt","official":"https://docs.djangoproject.com/ga/6.1/ref/tasks/","inVersions":["6.1","6.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}