1
resposta

[Projeto] Monitoramento de Downloads

import asyncio
import random


arquivos = [
    {"nome":'arquivo_1.txt', "tamanho": 0, "baixado": 0},
    {"nome":'arquivo_2.txt', "tamanho": 0, "baixado": 0},
    {"nome":'arquivo_3.txt', "tamanho": 0, "baixado": 0},
    {"nome":'arquivo_4.txt', "tamanho": 0, "baixado": 0},
    {"nome":'arquivo_5.txt', "tamanho": 0, "baixado": 0},
]

velocidade = 5

async def faz_download(arquivo):
 tamanho = random.randint(10, 50)
    baixado = 0
    arquivo['tamanho'] = tamanho
    print(f' Iniciando download de {arquivo['nome']} (tamanho: {arquivo['tamanho']} MB)...')

    n = 1
    while arquivo['baixado'] < arquivo['tamanho']:
        await asyncio.sleep(1)
        baixado = baixado + velocidade
        arquivo['baixado'] = baixado         
        print(f"[{n}s] {arquivo['nome']} : {arquivo['baixado']} MB baixados")
        n += 1
    
    print(f"[{arquivo['nome']}] concluído !")
    
async def main():
        tasks = [asyncio.create_task(faz_download(arquivo)) for arquivo in arquivos]
        await asyncio.gather(*tasks)
        
asyncio.run(main())
1 resposta

Oi! Como vai?

Seu uso de funções assíncronas para simular o download de arquivos está muito bem estruturado! A criação das tasks e o uso de asyncio.gather() permitem que todos os downloads ocorram ao mesmo tempo, o que é ideal para representar esse cenário.

Uma dica interessante para o futuro é usar o método asyncio.sleep() com valores aleatórios para simular variações de rede. Veja este exemplo:


import random
await asyncio.sleep(random.uniform(0.5, 1.5))

Esse trecho adiciona uma espera aleatória entre 0.5 e 1.5 segundos, simulando uma rede com latência variável.

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