1
resposta

Solução com base em um dicionário para as tarefas

import asyncio

timer = {"Tarefa1": 3,
        "Tarefa2": 5,
        "Tarefa3": 7}

status1 = ""
status2 = ""
status3 = ""

async def tarefa(numero):
    global status1, status2, status3
    if numero == 1:
        await asyncio.sleep(timer["Tarefa1"])
        status1 = "Finalizado"
        print ("Tarefa 1 finalizada!")
    elif numero == 2:
        await asyncio.sleep(timer["Tarefa2"])
        status2 = "Finalizado"
        print ("Tarefa 2 finalizada!")
    elif numero == 3:
        await asyncio.sleep(timer["Tarefa3"])
        status3 = "Finalizado"
        print ("Tarefa 3 finalizada!")

async def monitor():
    global status1, status2, status3
    status1 = "Em andamento"
    status2 = "Em andamento"
    status3 = "Em andamento"
    while status1 == "Em andamento" or status2 == "Em andamento" or status3 == "Em andamento":
        print (status1, status2, status3)
        await asyncio.sleep(1)

async def main():
    await asyncio.gather(tarefa(1),
                        tarefa(2),
                        tarefa(3),
                        monitor())

asyncio.run(main())

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Adriano, como vai?

Gostei bastante da sua solução, ela cumpre a proposta do exercício e já demonstra um bom domínio do uso de asyncio.gather para executar tarefas em paralelo. A lógica de separar as funções em tarefa e monitor está clara e funciona bem para o objetivo de acompanhar o status.

Continue compartilhando suas soluções no fórum, elas certamente ajudam outros colegas a aprender também.

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