1
resposta

[Bug] Fix: Add contador para mostrar a passagem do tempo corretamente

O codigo dado como solução não resulta na saida dada como exemplo:

Eu adicionei um contador para cada função, para alcançar a saida de exemplo do exercicio.

import random
import asyncio

async def temp():
    n = 1
    while True:
        await asyncio.sleep(2)
        t = random.randrange(25, 28)
        print(f"[{2*n}s] Temperature: {t:.1f} C")
        n += 1
    
    
async def humi():
    n = 1
    while True:
        await asyncio.sleep(3)
        h = random.randint(45, 68)
        print(f"[{3*n}s] Humidity: {h}%")
        n += 1
    
async def air():
    n = 1
    while True:
        await asyncio.sleep(5)
        a = random.choice(["Good", "Regular","Bad"])
        print(f"[{5*n}s] Air quality: {a}")
        n += 1
        
    
async def main():
    tasks = [asyncio.create_task(temp()), asyncio.create_task(humi()), asyncio.create_task(air())]
    await asyncio.gather(*tasks)

await main()

Estou usando Jupyter, onde a execução do programma é feita com 'await main()' ao invés de 'asyncio.run(main())'

1 resposta

Se o objetivo for mostrar o tempo total passado desde o início da execução, independente da função, uma solução mais precisa seria calcular o tempo real com time.perf_counter() ou asyncio.get_event_loop().time().

import random import asyncio

async def temp(start_time): while True: await asyncio.sleep(2) t = random.randrange(25, 28) elapsed = int(asyncio.get_event_loop().time() - start_time) print(f"[{elapsed}s] Temperature: {t:.1f} C")

async def humi(start_time): while True: await asyncio.sleep(3) h = random.randint(45, 68) elapsed = int(asyncio.get_event_loop().time() - start_time) print(f"[{elapsed}s] Humidity: {h}%")

async def air(start_time): while True: await asyncio.sleep(5) a = random.choice(["Good", "Regular", "Bad"]) elapsed = int(asyncio.get_event_loop().time() - start_time) print(f"[{elapsed}s] Air quality: {a}")

async def main(): start_time = asyncio.get_event_loop().time() tasks = [ asyncio.create_task(temp(start_time)), asyncio.create_task(humi(start_time)), asyncio.create_task(air(start_time)) ] await asyncio.gather(*tasks)

await main()