1
resposta

Monitorando tarefas

import asyncio
 
async def status_tarefa(numero, tempo):
    await asyncio.sleep(tempo)
    print(f"Tarefa {numero} finalizada!")

async def main():
   tarefas = [
        asyncio.create_task(status_tarefa("Tarefa 1", 3)),
        asyncio.create_task(status_tarefa("Tarefa 2", 5)),
        asyncio.create_task(status_tarefa("Tarefa 3", 7)),
    ]
   while any(not t.done() for t in tarefas):
        status = ["Finalizado" if t.done() else "Em andamento" for t in tarefas]
        print(f"Status das tarefas: {status}")
        await asyncio.sleep(1)



asyncio.run(main())   
1 resposta

Oi, Marcia! Como vai?

Gostei da forma como você usou any() para verificar se ainda existe alguma tarefa em andamento, tornando o monitoramento simples e claro. Uma melhoria interessante seria usar enumerate para mostrar junto o número da tarefa no status, deixando a saída mais descritiva.


import asyncio
 
async def status_tarefa(numero, tempo):
    await asyncio.sleep(tempo)
    print(f"Tarefa {numero} finalizada!")

async def main():
    tarefas = [
        asyncio.create_task(status_tarefa("Tarefa 1", 3)),
        asyncio.create_task(status_tarefa("Tarefa 2", 5)),
        asyncio.create_task(status_tarefa("Tarefa 3", 7)),
    ]
    while any(not t.done() for t in tarefas):
        status = [f"Tarefa {i+1}: Finalizado" if t.done() else f"Tarefa {i+1}: Em andamento" 
                  for i, t in enumerate(tarefas)]
        print(status)
        await asyncio.sleep(1)

asyncio.run(main())

Esse ajuste deixa a saída mais informativa e organizada.

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