Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Calculando fatoriais de forma assíncrona

Ótima proposta para entender a diferença que faz utilizar as funções assíncronas, porque se o programa parasse e ficasse guardando sem executar mais nada a cada cálculo feito, demoraria bem mais para calcular tudo e consequentemente imprimir as respostas.

Deixando meu código aqui abaixo para caso queiram sugerir melhorias.

import asyncio
import math

numeros = [5, 3, 7, 4, 6]

async def calcular_quadrado(numero):
    print(f'O fatorial do número {numero} está sendo calculado...')
    await asyncio.sleep(2)
    print(f'O fatorial de {numero} é {math.factorial(numero)}')

async def main():
    print('Iniciando processo principal na main()')

    respostas = []
    numeros.sort()

    for numero in numeros:
        respostas.append(asyncio.create_task(calcular_quadrado(numero)))
    
    await asyncio.gather(*respostas) # O * precendendo a lista permite passar cada elemento da lista (tarefas) de forma individual para o gather.
    
asyncio.run(main())
1 resposta
solução!

Olá, Lucas! Como vai?

Muito bem! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Observei que você explorou o uso de funções assíncronas com async def para lidar com tarefas simultâneas, utilizou muito bem o asyncio.create_task() para iniciar múltiplas tarefas de forma eficiente e ainda compreendeu a importância do asyncio.gather() para coordenar a execução paralela.

Uma dica interessante para o futuro é usar asyncio.as_completed() para processar os resultados conforme cada tarefa termina. Dessa forma:

async def main():
    tarefas = [calcular_quadrado(n) for n in numeros]
    for tarefa in asyncio.as_completed(tarefas):
        await tarefa

Resultado:

O fatorial do número 3 está sendo calculado...
O fatorial de 3 é 6
O fatorial do número 4 está sendo calculado...
O fatorial de 4 é 24
...

Isso faz com que os resultados sejam exibidos conforme cada tarefa termina, o que pode ser muito útil para monitoramento em tempo real.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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