1
resposta

[Sugestão] Processando pedidos de uma loja

import asyncio

pedidos = [
    {"id": 101, "pagamento_aprovado": True, "estoque_disponivel": True},
    {"id": 102, "pagamento_aprovado": True, "estoque_disponivel": False},
    {"id": 103, "pagamento_aprovado": False, "estoque_disponivel": True},
    {"id": 104, "pagamento_aprovado": True, "estoque_disponivel": True},
    {"id": 105, "pagamento_aprovado": False, "estoque_disponivel": False},
]

async def verificar_pagamento(pedido):
    await asyncio.sleep(0.5) # Simula tempo de resposta do banco
    return pedido["pagamento_aprovado"]

async def verificar_estoque(pedido):
    await asyncio.sleep(0.5) # Simula tempo de resposta do deposito
    return pedido["estoque_disponivel"]

async def processar_um_pedido(pedido):
    # Roda as duas verificacoes do MESMO pedido ao mesmo tempo
    pagamento, estoque = await asyncio.gather(
        verificar_pagamento(pedido),
        verificar_estoque(pedido)
    )
    
    status = "APROVADO" if pagamento and estoque else "REPROVADO"
    print(f"Pedido {pedido['id']}: {status}")

async def main():
    print("Iniciando processamento em massa...\n")
    # Cria uma lista de tarefas para TODOS os pedidos
    tarefas = [processar_um_pedido(p) for p in pedidos]
    
    # Executa todos os pedidos simultaneamente
    await asyncio.gather(*tarefas)

if __name__ == "__main__":
    asyncio.run(main())
1 resposta

Olá, Marinaldo! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso do asyncio.gather para rodar verificações simultâneas com Python, utilizou muito bem a função assíncrona para estruturar o fluxo de cada pedido e ainda compreendeu a importância da concorrência controlada para otimizar o processamento em massa.

Uma dica interessante para o futuro é aplicar asyncio.as_completed quando quiser tratar resultados conforme cada tarefa termina, sem esperar todas concluírem. Assim:

tarefas = [processar_um_pedido(p) for p in pedidos]

for concluida in asyncio.as_completed(tarefas):
    await concluida

Isso permite maior responsividade, já que os resultados vão sendo exibidos à medida que cada pedido é processado.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!