Задачи
Определение задачи
Декоратор task
-
task(*, priority=0, queue_name='default', backend='default', takes_context=False)[источник] -
Декоратор
@taskопределяет экземплярTask. Он принимает следующие необязательные аргументы:-
priority: задаётpriorityобъектаTask. По умолчанию равно 0. -
queue_name: задаётqueue_nameобъектаTask. По умолчанию равно"default". -
backend: задаётbackendобъектаTask. По умолчанию равно"default". -
takes_context: определяет, принимает ли функцияTaskаргументTaskContext. По умолчанию равноFalse. Подробности см. в разделе Контекст задачи.
Если определённый объект
Taskнедопустим для бэкенда, вызывается исключениеInvalidTask.Примеры использования см. в разделе определение задач.
-
Task
-
class Task[источник] -
Представляет задачу, выполняемую в фоновом режиме. Задачи следует определять с помощью декоратора
task().Атрибуты объекта
Taskнельзя изменять. Подробности см. в разделе изменение задач.-
priority -
Приоритет объекта
Task. Приоритет должен находиться в диапазоне от -100 до 100. Чем больше число, тем выше приоритет и тем раньше будет выполнена задача.Чтобы использовать эту возможность, атрибут
supports_priorityбэкенда должен иметь значениеTrue.
-
backend -
Псевдоним бэкенда, в очередь которого следует добавить объект
Task. Он должен соответствовать бэкенду, определённому вBACKEND.
-
queue_name -
Имя очереди, в которую будет добавлен объект
Task. По умолчанию равно"default". Оно должно соответствовать очереди, определённой вQUEUES, если только дляQUEUESне задано значение[].
-
run_after -
Самое раннее время выполнения объекта
Task. Это может бытьtimedelta, отсчитываемое от текущего времени, объектdatetimeс часовым поясом илиNone, если ограничение не задано. По умолчанию равноNone.Чтобы использовать эту возможность, атрибут
supports_deferбэкенда должен иметь значениеTrue. В противном случае вызывается исключениеInvalidTask.
-
name[источник] -
Имя функции, декорированной с помощью
task(). Это имя не обязательно должно быть уникальным.
-
using(*, priority=None, backend=None, queue_name=None, run_after=None)[источник] -
Создаёт новый объект
Taskс изменёнными значениями по умолчанию. Существующий объектTaskостаётся без изменений.usingпозволяет изменять следующие атрибуты:Примеры использования см. в разделе изменение задач.
-
enqueue(*args, **kwargs)[источник] -
Добавляет объект
Taskв очередь бэкендаTaskдля последующего выполнения.Аргументы передаются функции объекта
Taskпосле цикла сериализации и десериализации с помощьюjson.dumps()/json.loads(). Поэтому все аргументы должны быть сериализуемы в JSON, а их типы должны сохраняться после такого преобразования.Если объект
Taskнедопустим для бэкенда, вызывается исключениеInvalidTask.Примеры использования см. в разделе добавление задач в очередь.
-
aenqueue(*args, **kwargs) -
Асинхронный вариант метода
enqueue—async.
-
get_result(result_id)[источник] -
Получает результат по его идентификатору.
Если результат не существует, вызывается исключение
TaskResultDoesNotExist. Если результат имеет тип, отличный от типа текущей задачи, вызывается исключениеTaskResultMismatch. Если бэкенд не поддерживаетget_result(), вызывается исключениеNotImplementedError.
-
aget_result(*args, **kwargs) -
Асинхронный вариант метода
get_result—async.
-
Контекст задачи
-
class TaskContext[источник] -
Содержит контекст выполняемой
Task. Контекст передаётся объектуTaskтолько в том случае, если он был определён с помощьюtakes_context=True.Атрибуты объекта
TaskContextнельзя изменять.-
task_result -
Выполняемый в данный момент объект
TaskResult.
-
attempt[источник] -
Номер текущей попытки выполнения этой задачи, начиная с 1.
-
Результаты задач
-
class TaskResultStatus[источник] -
Перечисление, представляющее статус объекта
TaskResult.-
READY -
Объект
Taskтолько что добавлен в очередь или готов к повторному выполнению.
-
RUNNING -
Объект
Taskвыполняется в данный момент.
-
FAILED -
Во время выполнения объекта
Taskвозникло исключение или задачу не удалось запустить.
-
SUCCESSFUL -
Объект
Taskуспешно выполнен.
-
-
class TaskResult[источник] -
Объект
TaskResultхранит информацию о конкретном выполнении задачиTask.Атрибуты объекта
TaskResultнельзя изменять.-
task -
Задача
Task, для которой был добавлен в очередь этот результат.
-
id -
Уникальный идентификатор результата, который можно передать в
Task.get_result().Формат идентификатора зависит от используемого бэкенда. Идентификаторы результатов задач всегда являются строками длиной менее 64 символов.
Подробнее см. в разделе Результаты задач.
-
status -
statusрезультата.
-
enqueued_at -
Время добавления объекта
Taskв очередь.
-
started_at -
Время начала выполнения объекта
Taskпри первой попытке.
-
last_attempted_at -
Время начала последнего запуска объекта
Task.
-
finished_at -
Время завершения выполнения объекта
Task— успешно или с ошибкой.
-
backend -
Бэкенд, из которого получен результат.
-
errors -
Список экземпляров
TaskErrorдля ошибок, возникших при каждом выполнении задачи.
-
return_value[источник] -
Возвращаемое значение функции
Task.Если объект
Taskне завершился успешно, вызывается исключениеValueError.Примеры использования см. в разделе возвращаемые значения.
-
refresh()[источник] -
Обновляет атрибуты результата из хранилища очереди.
-
arefresh() -
Асинхронный вариант метода
TaskResult.refresh()—async.
-
is_finished[источник] -
Показывает, завершился ли объект
Task(успешно или нет).
-
attempts[источник] -
Количество запусков задачи.
Если задача выполняется в данный момент, этот запуск не считается попыткой.
-
worker_ids -
Идентификаторы рабочих процессов, выполнявших задачу.
-
Ошибки задач
-
class TaskError -
Содержит информацию об ошибке, возникшей при выполнении объекта
Task.-
traceback -
Трассировка стека (в виде строки) возникшего исключения, из-за которого завершилось с ошибкой выполнение объекта
Task.
-
exception_class -
Класс исключения, возникшего при выполнении объекта
Task.
-
Бэкенды
Базовый бэкенд
-
class BaseTaskBackend[источник] -
BaseTaskBackend— родительский класс для всех бэкендов задач.-
options -
Словарь дополнительных параметров бэкенда задач. Они задаются с помощью настройки
OPTIONS.
-
enqueue(task, args, kwargs)[источник] -
Бэкенды задач, наследующие
BaseTaskBackend, должны как минимум реализовать этот метод.После реализации
enqueue()добавляет объектtask— экземплярTask— в очередь для последующего выполнения.args— это позиционные аргументы, аkwargs— именованные аргументы, передаваемые объектуtask. Возвращает экземплярTaskResult.
-
aenqueue(task, args, kwargs) -
Асинхронный вариант метода
BaseTaskBackend.enqueue()—async.
-
get_result(result_id)[источник] -
Получает результат по его идентификатору. Если результат не существует, вызывается исключение
TaskResultDoesNotExist.Если бэкенд не поддерживает
get_result(), вызывается исключениеNotImplementedError.
-
aget_result(result_id) -
Асинхронный вариант метода
BaseTaskBackend.get_result()—async.
-
validate_task(task)[источник] -
Проверяет, можно ли добавить предоставленный объект
Taskв очередь с помощью этого бэкенда. Если задача недопустима, вызывается исключениеInvalidTask.
-
Флаги возможностей
Некоторые бэкенды могут поддерживать не все возможности Django. Можно определить, какие возможности поддерживает бэкенд, и при необходимости соответствующим образом изменить поведение.
-
BaseTaskBackend.supports_defer -
Показывает, поддерживает ли бэкенд добавление задач в очередь для выполнения после заданного времени с помощью атрибута
run_after.
-
BaseTaskBackend.supports_async_task -
Показывает, поддерживает ли бэкенд добавление асинхронных функций (корутин) в очередь.
-
BaseTaskBackend.supports_get_result -
Показывает, поддерживает ли бэкенд получение результатов
Taskиз другого потока после добавления в очередь.
-
BaseTaskBackend.supports_priority -
Показывает, поддерживает ли бэкенд выполнение задач в порядке, заданном их атрибутом
priority.
В таблице ниже указано, какие из встроенных бэкендов поддерживают те или иные возможности:
Возможность | ||
|---|---|---|
Да | Нет | |
Да | Да | |
Нет | Нет [1] | |
Да [2] | Да [3] |
Доступные бэкенды
Непосредственный бэкенд
-
class ImmediateBackend[источник] -
Непосредственный бэкенд выполняет задачи сразу, а не в фоновом режиме.
Фиктивный бэкенд
-
class DummyBackend[источник] -
Фиктивный бэкенд не выполняет задачи, добавленные в очередь. Вместо этого он сохраняет результаты задач для последующего просмотра.
-
results -
Список результатов задач, добавленных в очередь, в порядке их добавления.
-
clear()[источник] -
Очищает список сохранённых результатов.
-
Исключения
-
exception InvalidTask[исходный код] -
Возникает, если
Task, которую пытаются поставить в очередь, недействительна.
-
exception InvalidTaskBackend[исходный код] -
Возникает, если запрошенный
BaseTaskBackendнедействителен.
-
exception TaskResultDoesNotExist[исходный код] -
Возникает в
get_result(), если указанныйresult_idне существует.
-
exception TaskResultMismatch[исходный код] -
Возникает в
get_result(), если указанныйresult_idотносится к другой задаче, а не к текущей.
Сноски
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/tasks/