Files
fastapi/docs/ru/docs/tutorial/background-tasks.md
Motov Yurii 55a9eee13a 🌐 Update translations for ru (update-outdated) (#14909)
* Update all

* Reflect latest changes in `docs/en/docs/tutorial/security/oauth2-jwt.md`
2026-02-12 20:57:34 +01:00

7.6 KiB
Raw Blame History

Фоновые задачи

Вы можете создавать фоновые задачи, которые будут выполняться после возврата ответа.

Это полезно для операций, которые должны произойти после HTTP-запроса, но клиенту не обязательно ждать их завершения, чтобы получить ответ.

Например:

  • Уведомления по электронной почте, отправляемые после выполнения действия:
    • Так как подключение к почтовому серверу и отправка письма обычно «медленные» (несколько секунд), вы можете сразу вернуть ответ, а отправку уведомления выполнить в фоне.
  • Обработка данных:
    • Например, если вы получаете файл, который должен пройти через медленный процесс, вы можете вернуть ответ «Accepted» (HTTP 202) и обработать файл в фоне.

Использование BackgroundTasks

Сначала импортируйте BackgroundTasks и объявите параметр в вашей функции‑обработчике пути с типом BackgroundTasks:

{* ../../docs_src/background_tasks/tutorial001_py310.py hl[1,13] *}

FastAPI создаст объект типа BackgroundTasks для вас и передаст его через этот параметр.

Создание функции для фоновой задачи

Создайте функцию, которую нужно запустить как фоновую задачу.

Это обычная функция, которая может принимать параметры.

Это может быть как async def, так и обычная функция def, FastAPI знает, как корректно её выполнить.

В этом случае функция задачи будет записывать данные в файл (имитируя отправку письма).

Так как операция записи не использует async и await, мы определим функцию как обычную def:

{* ../../docs_src/background_tasks/tutorial001_py310.py hl[6:9] *}

Добавление фоновой задачи

Внутри вашей функции‑обработчика пути передайте функцию задачи объекту фоновых задач методом .add_task():

{* ../../docs_src/background_tasks/tutorial001_py310.py hl[14] *}

.add_task() принимает следующие аргументы:

  • Функцию задачи, которую нужно выполнить в фоне (write_notification).
  • Последовательность позиционных аргументов, которые должны быть переданы функции задачи, в порядке (email).
  • Любые именованные аргументы, которые должны быть переданы функции задачи (message="some notification").

Встраивание зависимостей

Использование BackgroundTasks также работает с системой встраивания зависимостей, вы можете объявить параметр типа BackgroundTasks на нескольких уровнях: в функции‑обработчике пути, в зависимости (dependable), в подзависимости и т.д.

FastAPI знает, что делать в каждом случае и как переиспользовать один и тот же объект, так чтобы все фоновые задачи были объединены и затем выполнены в фоне:

{* ../../docs_src/background_tasks/tutorial002_an_py310.py hl[13,15,22,25] *}

В этом примере сообщения будут записаны в файл log.txt после отправки ответа.

Если в запросе была строка запроса (query), она будет записана в лог фоновой задачей.

Затем другая фоновая задача, созданная в функции‑обработчике пути, запишет сообщение, используя pathпараметр email.

Технические детали

Класс BackgroundTasks приходит напрямую из starlette.background.

Он импортируется/включается прямо в FastAPI, чтобы вы могли импортировать его из fastapi и избежать случайного импорта альтернативного BackgroundTask (без s на конце) из starlette.background.

Используя только BackgroundTasks (а не BackgroundTask), его можно применять как параметр функции‑обработчика пути, и FastAPI сделает остальное за вас, как при использовании объекта Request напрямую.

По‑прежнему можно использовать один BackgroundTask в FastAPI, но тогда вам нужно создать объект в своём коде и вернуть Starlette Response, включающий его.

Подробнее см. в официальной документации Starlette по фоновым задачам.

Предостережение

Если вам нужно выполнять тяжелые вычисления в фоне, и при этом они не обязательно должны запускаться тем же процессом (например, вам не нужно делиться памятью, переменными и т.п.), вам могут подойти более мощные инструменты, такие как Celery.

Они обычно требуют более сложной конфигурации, менеджера очереди сообщений/заданий (например, RabbitMQ или Redis), но позволяют запускать фоновые задачи в нескольких процессах и, что особенно важно, на нескольких серверах.

Но если вам нужен доступ к переменным и объектам из того же приложения FastAPI, или нужно выполнять небольшие фоновые задачи (например, отправку emailуведомления), вы можете просто использовать BackgroundTasks.

Резюме

Импортируйте и используйте BackgroundTasks с параметрами в функциях‑обработчиках пути и зависимостях, чтобы добавлять фоновые задачи.