DEV Community

Cover image for Do Java ao Python: A arte de simplificar tarefas assíncronas
Matheus Moura
Matheus Moura

Posted on

Do Java ao Python: A arte de simplificar tarefas assíncronas

Do Java ao Python: A arte de simplificar tarefas assíncronas

Sou desenvolvedor Java há 5 anos. Se você vem desse mundo, sabe que somos treinados para pensar em arquiteturas robustas. Precisa enviar um e-mail depois que o usuário se cadastra? "Ah, vamos subir um RabbitMQ, criar um Producer, configurar um Consumer, lidar com Ack/Nack..."

Quando comecei a migrar para o Python e FastAPI (estou desenvolvendo um SaaS chamado Pitaia Hub), meu primeiro instinto foi replicar essa infraestrutura complexa.

Foi aí que descobri o BackgroundTasks do FastAPI e percebi que estava "matando moscas com canhão".

O Problema: Latência na Resposta

Imagine o cenário clássico:

  1. Usuário cria conta.
  2. Sistema salva no banco.
  3. Sistema conecta no SMTP (Gmail/AWS SES) e envia e-mail de boas-vindas.
  4. Sistema retorna 200 OK.

O passo 3 demora, digamos, 2 a 4 segundos. Para o usuário, a tela fica travada.

A Solução "Enterprise" (O Jeito Java/Mensageria)

No mundo Java (Spring Boot), ou mesmo em arquiteturas Python mais complexas (Celery), resolveríamos isso desacoplando a tarefa:

  1. API: Salva user e publica mensagem na fila user_created.
  2. Broker (RabbitMQ/Kafka): Recebe e guarda a mensagem.
  3. Worker: Processo separado que lê a fila e envia o e-mail.

Funciona? Sim. É robusto? Muito. É necessário para enviar um simples e-mail de "Oi"? Provavelmente não.

A Solução "Simples" (FastAPI BackgroundTasks)

O FastAPI traz um conceito de "Fire and Forget" embutido, que roda na mesma aplicação, logo após o retorno da resposta HTTP.

Veja como é simples. Sem filas, sem workers externos, sem Docker extra.



from fastapi import FastAPI, BackgroundTasks

app = FastAPI()

def enviar_email(email: str):
    # Simula um delay de I/O (SMTP)
    import time
    time.sleep(5)
    print(f"E-mail enviado para {email}")

@app.post("/users")
async def criar_usuario(email: str, background_tasks: BackgroundTasks):
    # 1. Regra de Negócio Crítica (Rápida)
    print("Usuário salvo no banco")

    # 2. Agendamento da Tarefa
    background_tasks.add_task(enviar_email, email)

    # 3. Retorno Imediato
    return {"message": "Usuário criado! O e-mail chegará em breve."}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)