PRO

Что такое Background Tasks в FastAPI?

BackgroundTasks позволяет запланировать небольшую фоновую работу после отправки HTTP-ответа клиенту. Это подходит для простых задач вроде отправки уведомления или записи лога, но для тяжёлых, критичных и распределённых задач лучше использовать отдельную очередь, например Celery.
Подробный ответ

Что делает BackgroundTasks

FastAPI получает объект BackgroundTasks как параметр endpoint и позволяет добавить в него функцию через add_task(). Клиент получит HTTP-ответ, а затем приложение выполнит зарегистрированную задачу.

from fastapi import BackgroundTasks, FastAPI

app = FastAPI()


def write_notification(email: str, message: str):
    print(f'Send notification to {email}: {message}')


@app.post('/notifications')
def create_notification(email: str, background_tasks: BackgroundTasks):
    background_tasks.add_task(
        write_notification,
        email,
        'Your notification was created',
    )
    return {'status': 'accepted'}

Подходящие сценарии

  • отправка небольшого email-уведомления;

  • запись вспомогательного лога;

  • небольшое уведомление во внешний сервис;

  • лёгкая постобработка данных, которая не должна задерживать ответ.

Ограничения

Background tasks выполняются в том же процессе приложения после возврата ответа. Они не дают надёжной очереди, независимого масштабирования, сложных ретраев или гарантий сохранения задачи при падении процесса.

Когда нужен Celery или другая очередь

Если задача тяжёлая, CPU-bound, требует ретраев, scheduled execution, гарантированной доставки или отдельного масштабирования, лучше отправлять её в Celery, RQ, Dramatiq или другой task queue с broker, например Redis или RabbitMQ.

Как ответить на собеседовании

BackgroundTasks выполняет небольшую задачу после возврата HTTP-ответа. Я использую его для лёгких некритичных действий, а для надёжных и долгих задач выбираю отдельную очередь вроде Celery, потому что она поддерживает workers, ретраи и масштабирование.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге