1
resposta

[Projeto] [ Processando pedidos de uma loja]

Cheguei a fazer somente com uma função para o trabalho, acredito que vou ter que ler mais a respeito e melhorar com os dias o entendimento das funções assíncrona

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 processamento_pedidos(pedidos):
    print(f"Processando pedido #{pedidos['id']}...")
    if pedidos["pagamento_aprovado"]:
        print(f"Pagamento apovado para o pedido #{pedidos['id']}")
    if not pedidos["pagamento_aprovado"]:
        print(f"Pagamento recusado para pedido #{pedidos['id']}. Pedido cancelado.\n")
        return
    if pedidos["pagamento_aprovado"] == True and pedidos["estoque_disponivel"] == True:
        print(f"Estoque disponivel para o pedido #{pedidos['id']}\n#{pedidos['id']} confirmado! Enviado para entrega\n")

async def main():
    tarefas = [asyncio.create_task(processamento_pedidos(p)) for p in pedidos]
    await asyncio.gather(*tarefas)

asyncio.run(main())
1 resposta

Bom dia, Luan! Como está?

Incrível! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Notei que você utilizou o asyncio.create_task para paralelizar o processamento dos pedidos, aplicou de forma eficaz o controle condicional para validar pagamento e compreendeu a importância do fluxo assíncrono para otimizar tarefas simultâneas.

Um próximo passo interessante seria explorar o uso de logs com timestamps para monitorar o tempo de cada etapa. Veja o exemplo:

import asyncio
from datetime import datetime

async def log_event(pedido_id, evento):
    print(f"[{datetime.now().strftime('%H:%M:%S')}] Pedido #{pedido_id}: {evento}")

async def processamento_pedidos(pedido):
    await log_event(pedido["id"], "Iniciando processamento")
    if not pedido["pagamento_aprovado"]:
        await log_event(pedido["id"], "Pagamento recusado. Pedido cancelado.\n")
        return
    await log_event(pedido["id"], "Pagamento aprovado")
    if pedido["estoque_disponivel"]:
        await log_event(pedido["id"], "Estoque disponível. Pedido confirmado!\n")
    else:
        await log_event(pedido["id"], "Estoque indisponível. Pedido pendente.\n")

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

async def main():
    tarefas = [asyncio.create_task(processamento_pedidos(p)) for p in pedidos]
    await asyncio.gather(*tarefas)

asyncio.run(main())

Isso permite rastrear o andamento dos pedidos com mais precisão, que pode ser muito útil para sistemas reais de e-commerce.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

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!