1
resposta

Atividade 13.

import asyncio
import random

VELOCIDADE_DOWNLOAD = 5 # MB por segundo

Função assíncrona para simular o download

async def baixar_arquivo(nome_arquivo, tamanho):
print(f"Iniciando download de {nome_arquivo} (tamanho: {tamanho}MB)...")

baixado = 0
tempo = 0

while baixado < tamanho:
    await asyncio.sleep(1)
    tempo += 1

    baixado += VELOCIDADE_DOWNLOAD

    # Garante que não ultrapasse o tamanho total
    if baixado > tamanho:
        baixado = tamanho

    print(f"[{tempo}s] {nome_arquivo}: {baixado}MB baixados")

print(f"{nome_arquivo} concluído!\n")

Função principal

async def main():
tarefas = []

# Criando 5 arquivos com tamanhos aleatórios
for i in range(1, 6):
    nome = f"arquivo_{i}.txt"
    tamanho = random.randint(10, 50)

    tarefa = asyncio.create_task(baixar_arquivo(nome, tamanho))
    tarefas.append(tarefa)

# Aguarda todos os downloads terminarem
await asyncio.gather(*tarefas)

print("Todos os downloads foram finalizados!")

Executa o programa

asyncio.run(main())

1 resposta

Oi, Luiz! Como vai?

Agradeço por compartilhar

Seu código ficou bem organizado e mostra uma boa aplicação de programação assíncrona com asyncio.create_task() e asyncio.gather(), permitindo simular vários downloads acontecendo ao mesmo tempo. Também foi uma boa escolha controlar o progresso com await asyncio.sleep(1), pois isso ajuda a visualizar melhor o comportamento assíncrono.

Continue praticando esse tipo de estrutura, pois ela é muito usada quando queremos executar tarefas que dependem de espera, como downloads, requisições ou leitura de arquivos.

Dica: para melhorar ainda mais, você pode adicionar uma mensagem mostrando o tamanho total e o percentual baixado, calculando baixado / tamanho * 100, assim o acompanhamento do download fica mais completo.

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