1
resposta

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 delivery(pedido):
    await asyncio.sleep(pedidos.index(pedido) * 1.5)
    print(f'Processando pedido #{pedido["id"]}...')
    if not pedido['pagamento_aprovado']:
        print(f'Pagamento recusado para pedido #{pedido["id"]}. Pedido cancelado.\n')
        return 
    
    if not pedido['estoque_disponivel']:
        print(f'Estoque indisponível para pedido #{pedido["id"]}. Pedido cancelado.\n')
        return
    
    print(f'Pagamento aprovado para pedido #{pedido["id"]}.')
    print(f'Estoque disponível para pedido #{pedido["id"]}.')
    print(f'Pedido #{pedido["id"]} confirmado! Enviado para entrega.\n')

async def main():
    tarefas = [asyncio.create_task(delivery(u)) for u in pedidos[:3]]
    await asyncio.gather(*tarefas)

    print('Todos os pedidos foram processados!')

asyncio.run(main())
1 resposta

Oi, Estudante! Como vai?

Obrigada por compartilhar seu código com a comunidade Alura.

Seu uso de asyncio.create_task() para lidar com múltiplos pedidos simultaneamente tá muito bem aplicado. O controle com sleep baseado no índice deu um efeito de escalonamento interessante no processamento.

Alura

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