🧩 Exercícios: Tarefas em Segundo Plano com BackgroundTasks
Spec Backend Com Python E Fastapi • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 13.1 — Disparo de Notificação em Background
Contexto: Disparo de Notificação em Background no contexto de Tarefas em Segundo Plano com BackgroundTasks.
Requisitos de Execução:
- Injetar
BackgroundTasksem rota POST e agendar execução assíncrona de envio de email após resposta HTTP.
Resultado Esperado
Resposta 202 retornada imediatamente | Tarefa executada em background.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_1_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# bg_tasks.py
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def enviar_email_confirmacao(email: str, pedido_id: int):
print(f"[BACKGROUND]: Email de confirmação enviado para {email} (Pedido #{pedido_id})")
@app.post("/pedidos/{pedido_id}/confirmar")
async def confirmar_pedido(pedido_id: int, bg: BackgroundTasks):
bg.add_task(enviar_email_confirmacao, "cliente@email.com", pedido_id)
return {"status": "PROCESSANDO", "pedido_id": pedido_id}
🔍 Nível 2: Prática
Problema 13.2 — Agendamento de Múltiplas Tarefas com Parâmetros
Contexto: Agendamento de Múltiplas Tarefas com Parâmetros no contexto de Tarefas em Segundo Plano com BackgroundTasks.
Requisitos de Execução:
- Enfileirar duas tarefas independentes em background (gerar PDF de fatura + atualizar métricas).
Resultado Esperado
Duas tarefas em background disparadas em paralelo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_2_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# multiple_bg_tasks.py
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def gerar_pdf(doc_id): print(f"Gerando PDF #{doc_id}")
def notificar_slack(msg): print(f"Notificando Slack: {msg}")
@app.post("/documentos/{doc_id}/processar")
async def processar_doc(doc_id: int, bg: BackgroundTasks):
bg.add_task(gerar_pdf, doc_id)
bg.add_task(notificar_slack, f"Documento #{doc_id} em processamento")
return {"mensagem": "Tarefas agendadas"}
⚡ Nível 3: Integração
Problema 13.3 — Tratamento de Erros e Logs em BackgroundTasks
Contexto: Tratamento de Erros e Logs em BackgroundTasks no contexto de Tarefas em Segundo Plano com BackgroundTasks.
Requisitos de Execução:
- Envolver a execução da tarefa em bloco try/catch registrando falhas em arquivo de auditoria.
Resultado Esperado
Falha em background tratada e registrada em log sem derrubar o worker.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_3_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# safe_bg_task.py
def tarefa_segura_com_log(dados):
try:
if not dados: raise ValueError("Dados vazios")
print(f"Processamento bem sucedido: {dados}")
except Exception as e:
print(f"ERRO AUDITADO em Background: {e}")
tarefa_segura_com_log({"id": 10})
tarefa_segura_com_log(None)
🏆 Nível 4: Desafio Corporativo
Problema 13.4 — Limitações de BackgroundTasks vs Workers Dedicados
Contexto: Limitações de BackgroundTasks vs Workers Dedicados no contexto de Tarefas em Segundo Plano com BackgroundTasks.
Requisitos de Execução:
- Demonstrar arquitetura comparativa indicando quando migrar de BackgroundTasks nativas para Celery/Redis.
Resultado Esperado
BackgroundTasks adequadas para I/O leve (< 2s) | Celery indicado para processamento pesado e retries.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_4_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tarefas em Segundo Plano com BackgroundTasks
🔑 Gabarito de Código & Solução Comentada
# task_strategy_advisor.py
def recomendar_estrategia_tarefas(tempo_estimado_segundos, exige_retries):
if tempo_estimado_segundos > 5 or exige_retries:
return "RECOMENDADO: Celery / Redis / RabbitMQ (Worker Dedicado)"
return "RECOMENDADO: BackgroundTasks nativas do FastAPI"
print("Envio de Email Simples:", recomendar_estrategia_tarefas(1, False))
print("Processamento de Vídeo :", recomendar_estrategia_tarefas(60, True))