- 3.1
- Версия документации: 6.1
Задачи¶
Платформа задач обеспечивает контракт и возможности для фоновой работы, а не механизм, который ее выполняет. API задач определяет, как работа описывается, ставится в очередь и отслеживается, но фактическое выполнение оставляется внешней инфраструктуре.
Определение задачи¶
Декоратор задач¶
- task(*, priority=0, queue_name='default', backend='default', takes_context=False)¶
Декоратор @task определяет экземпляр
Task. Имеет следующие необязательные аргументы:priority: устанавливаетpriorityTask. По умолчанию 0.queue_name: устанавливаетqueue_nameTask. По умолчанию установлено значение «по умолчанию».backend: устанавливаетbackendTask. По умолчанию установлено значение «по умолчанию».takes_context: контролирует, принимает ли функцияTaskTaskContext. По умолчанию установлено значение «False». Подробности смотрите в Контексте задачи.
Если определенная
Taskнедействительна в соответствии с серверной частью, вызываетсяInvalidTask.См. примеры использования в разделе «Определение задач <defining-tasks>».
Задание¶
- class Task¶
Представляет задачу, выполняемую в фоновом режиме. Задачи следует определять с помощью декоратора
task().Атрибуты «Задачи» не могут быть изменены. Подробности см. в разделе изменение задач.
- priority¶
Приоритет
Задачи. Приоритеты должны находиться в диапазоне от -100 до 100, при этом большие числа имеют более высокий приоритет и будут выполняться раньше.Чтобы использовать эту функцию, на бэкэнде для параметра
supports_priorityдолжно быть установлено значениеTrue.
- backend¶
Псевдоним серверной части «Задачи» должен быть поставлен в очередь. Это должно соответствовать серверной части, определенной в
BACKEND.
- queue_name¶
Имя очереди, в которую будет поставлена задача. По умолчанию установлено значение «по умолчанию». Это должно соответствовать очереди, определенной в
QUEUES, если толькоQUEUESне установлен в[].
- run_after¶
Самый ранний момент выполнения
Задачи. Это может бытьtimedelta, который используется относительно текущего времени,datetime, учитывающий часовой пояс, илиNone, если оно не ограничено. По умолчанию установлено значение «Нет».Чтобы использовать эту функцию, на бэкэнде для параметра
supports_deferдолжно быть установлено значениеTrue. В противном случае возникаетInvalidTask.
- using(*, priority=None, backend=None, queue_name=None, run_after=None)¶
Создает новую «Задачу» с измененными настройками по умолчанию. Существующая
Задачаостается без изменений.usingпозволяет изменять следующие атрибуты:Примеры использования см. в разделе modifying Tasks.
- enqueue(*args, **kwargs)¶
Ставит задачу в очередь на серверную часть задачи для последующего выполнения.
Аргументы передаются в функцию Task после прохождения цикла
json.dumps()/json.loads(). Следовательно, все аргументы должны быть сериализуемы в формате JSON и сохранять свой тип после прохождения туда и обратно.Если
Taskнедействителен в соответствии с серверной частью, вызываетсяInvalidTask.См. примеры использования в разделе «Задачи постановки в очередь <enqueueing-tasks>».
- get_result(result_id)¶
Получает результат по его идентификатору.
Если результат не существует, вызывается
TaskResultDoesNotExist. Если результат не того же типа, что и текущая Задача, возникаетTaskResultMismatch. Если серверная часть не поддерживает get_result(), возникаетNotImplementedError.
- aget_result(*args, **kwargs)¶
асинхронныйвариантget_result.
Контекст задачи¶
- class TaskContext¶
Содержит контекст для запуска
Task. Контекст передается вЗадачутолько в том случае, если он был определен сtakes_context=True.Атрибуты TaskContext не могут быть изменены.
- task_result¶
TaskResultвыполняется в данный момент.
- attempt¶
Количество текущих попыток выполнения этой Задачи, начиная с 1.
Результаты задачи¶
- class TaskResultStatus¶
Enum, представляющий статус
TaskResult.
- class TaskResult¶
TaskResultхранит информацию о конкретном выполненииTask.Атрибуты TaskResult не могут быть изменены.
- id¶
Уникальный идентификатор результата, который можно передать
Task.get_result().Формат идентификатора будет зависеть от используемого бэкэнда. Идентификаторы результатов задач всегда представляют собой строки длиной менее 64 символов.
Дополнительную информацию см. в разделе Результаты задачи.
- enqueued_at¶
Время, когда задача была поставлена в очередь.
- started_at¶
Время начала выполнения задачи с первой попытки.
- last_attempted_at¶
Время начала выполнения последнего запуска «Задачи».
- finished_at¶
Время, когда «Задача» завершила выполнение, независимо от того, завершилось оно успешно или неудачно.
- backend¶
Серверная часть, из которой получен результат.
- return_value¶
Возвращаемое значение функции Task.
Если
Задачане завершилась успешно, выдаетсяValueError.Примеры использования см. в разделе возвращаемые значения.
- refresh()¶
Обновите атрибуты результата из хранилища очереди.
- arefresh()¶
АсинхронныйвариантTaskResult.refresh().
- is_finished¶
Завершено ли
Задание(успешно или нет).
- attempts¶
Количество запусков задачи.
Если задача в данный момент выполняется, она не считается попыткой.
- worker_ids¶
Идентификаторы работников, выполнивших задание.
Ошибки задачи¶
Серверные части¶
Бэкэнды управляют тем, как задачи хранятся и выполняются. Все серверные части имеют общий интерфейс, определенный BaseTaskBackend, который определяет основные методы для постановки задач в очередь и получения результатов.
Базовый бэкэнд¶
- class BaseTaskBackend¶
BaseTaskBackend— это родительский класс для всех серверов задач.- options¶
Словарь дополнительных параметров для бэкэнда Task. Они предоставляются с помощью настройки
OPTIONS.
- enqueue(task, args, kwargs)¶
Серверные части задач, подкласс которых
BaseTaskBackendдолжны реализовывать этот метод как минимум.При реализации enqueue() ставит в очередь задачу, экземпляр
Task, для последующего выполнения.args— это позиционные аргументы, аkwargs— это аргументы ключевого слова, которые будут переданы взадачу. ВозвращаетTaskResult.
- aenqueue(task, args, kwargs)¶
АсинхронныйвариантBaseTaskBackend.enqueue().
- get_result(result_id)¶
Получить результат по его идентификатору. Если результат не существует, вызывается
TaskResultDoesNotExist.Если серверная часть не поддерживает get_result(), возникает
NotImplementedError.
- aget_result(result_id)¶
АсинхронныйвариантBaseTaskBackend.get_result().
- validate_task(task)¶
Проверяет, может ли предоставленная задача быть поставлена в очередь с помощью серверной части. Если Задача недействительна, возникает
InvalidTask.
Флаги функций¶
Некоторые серверные части могут не поддерживать все функции, предоставляемые Django. Можно определить поддерживаемые функции серверной части и потенциально изменить ее поведение соответствующим образом.
- BaseTaskBackend.supports_defer¶
Поддерживает ли серверная часть постановку задач в очередь для выполнения через определенное время с использованием атрибута
run_after.
- BaseTaskBackend.supports_async_task¶
Поддерживает ли серверная часть постановку в очередь асинхронных функций (сопрограмм).
- BaseTaskBackend.supports_get_result¶
Поддерживает ли серверная часть получение результатов задачи из другого потока после того, как они были поставлены в очередь.
- BaseTaskBackend.supports_priority¶
Поддерживает ли серверная часть выполнение задач в соответствии с их
priority.
В таблице ниже указано, какие из встроенных бэкэндов поддерживают какие функции:
Особенность |
||
|---|---|---|
Да |
Нет |
|
Да |
Да |
|
Нет |
Нет [1] |
|
Да [2] |
Да [3] |
Доступные бэкэнды¶
Django включает в себя только серверную часть разработки и тестирования. Они поддерживают локальное выполнение и проверку. Готовые к работе серверные части см. в разделе Настройка серверной части задачи.
Немедленный бэкэнд¶
- class ImmediateBackend¶
непосредственный бэкэнд выполняет задачи немедленно, а не в фоновом режиме.
Фиктивный бэкэнд¶
- class DummyBackend¶
dummy-серверная часть не выполняет поставленные в очередь задачи. Вместо этого он сохраняет результаты задач для последующей проверки.
- results¶
Список результатов для задач, поставленных в очередь, в том порядке, в котором они были поставлены в очередь.
- clear()¶
Очищает список сохраненных результатов.
Исключения¶
- exception InvalidTaskBackend¶
Возникает, когда запрошенный
BaseTaskBackendнедействителен.
- exception TaskResultDoesNotExist¶
Вызывается
get_result(), когда предоставленныйresult_idне существует.
- exception TaskResultMismatch¶
Вызывается
get_result(), когда предоставленныйresult_idпредназначен для другой задачи, чем текущая задача.
Сноски