BackgroundTasks agenda uma função para rodar depois que a resposta é enviada. É útil para ações pequenas no mesmo processo, como uma notificação simples, quando o cliente não precisa esperar pelo resultado.

from fastapi import BackgroundTasks, FastAPI, status

app = FastAPI()

def enviar_confirmacao(pedido_id: int) -> None:
    print(f"confirmar pedido {pedido_id}")

@app.post("/pedidos/{pedido_id}", status_code=status.HTTP_202_ACCEPTED)
async def criar_pedido(
    pedido_id: int,
    tarefas: BackgroundTasks,
) -> dict[str, int]:
    tarefas.add_task(enviar_confirmacao, pedido_id)
    return {"pedido_id": pedido_id}

A função pode ser síncrona ou assíncrona e recebe argumentos por add_task(). Retornar HTTP 202 comunica aceitação, não conclusão. Registre um identificador e ofereça status quando o resultado posterior fizer parte do contrato.

Boas práticas

Não trate BackgroundTasks como fila durável. Reinícios podem perder trabalho e várias réplicas não compartilham estado. Use Celery ou outro sistema persistente quando precisar de retry, agendamento, carga alta ou execução distribuída. Torne tarefas idempotentes e registre falhas sem dados sensíveis.

Veja Celery em Python para filas persistentes e injeção de dependências no FastAPI para organizar serviços.

A documentação oficial de BackgroundTasks do FastAPI, consultada em 22 de julho de 2026, detalha a API e seus limites.