1
resposta

Minha resposta

import asyncio
import math


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 valida_pagamento(pedido):
    await asyncio.sleep(1)
    if pedido["pagamento_aprovado"]:
        print(f"Pagamento aprovado para pedido #{pedido['id']}.\n")
        return True
    else:
        print(f"Pagamento recusado para pedido #{pedido['id']}. Pedido cancelado.\n")
        return False

async def verifica_estoque(pedido):
    await asyncio.sleep(1)
    if pedido["estoque_disponivel"]:
        print(f"Estoque disponível para pedido #{pedido['id']}.\n")
        return True
    else:
        print(f"Estoque indisponível para pedido #{pedido['id']}. Pedido cancelado.\n")
        return False

async def processamento(pedido):
    print(f"Processando pedido #{pedido['id']}")
    pagamento_valido = await valida_pagamento(pedido)

    if not pagamento_valido:
        return

    estoque_valido = await verifica_estoque(pedido)
    if not estoque_valido:
        return

    print(f"Pedido #{pedido['id']} confirmado! Enviado para entrega.\n")

async def main(): 
    tasks = [ asyncio.create_task(processamento(ped)) for ped in pedidos]
    await asyncio.gather(*tasks)
    print("Todos os pedidos foram processados!")

asyncio.run(main())
1 resposta

Oi, Franklim! Como vai?

Gostei de como você estruturou o processamento assíncrono dos pedidos utilizando asyncio e await, garantindo que cada etapa (pagamento e estoque) seja verificada antes de confirmar o pedido. A forma como você criou as tasks e utilizou asyncio.gather é eficiente para processar múltiplos pedidos simultaneamente.

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