Sobes.tech
Middle

O que é programação assíncrona (async)?

sobes.tech IA

Resposta da IA

A programação assíncrona é um paradigma que permite executar múltiplas tarefas simultaneamente, sem bloquear o fluxo principal de execução do programa. Isto é alcançado através do uso eficiente do tempo de espera (por exemplo, em operações de entrada/saída).

Conceitos principais:

  • Coroutines: Funções especiais que podem pausar a sua execução e retomá-la mais tarde. Declaradas com async def.
  • Loop de eventos: O orquestrador principal que gere a execução das coroutines, monitora os eventos e alterna entre tarefas quando uma delas espera.
  • await: Palavra-chave para pausar a execução de uma coroutine até que a operação esperada seja concluída (por exemplo, chamar outra coroutine ou aguardar um resultado de I/O).

Exemplo:

// Exemplo de função assíncrona
import asyncio

async def fetch_url(url):
    print(f"A iniciar carregamento: {url}")
    await asyncio.sleep(2) // Simulação de uma operação longa (por exemplo, pedido de rede)
    print(f"Carregamento concluído: {url}")

async def main():
    # Criar tarefas a partir de coroutines
    task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
    task2 = asyncio.create_task(fetch_url("http://example.com/page2"))

    # Esperar que ambas as tarefas terminem
    await task1
    await task2

// Executar o ciclo de eventos
if __name__ == "__main__":
    asyncio.run(main())

Vantagens:

  • Aumento de desempenho: Especialmente para tarefas vinculadas a I/O (requisições de rede, trabalho com ficheiros).
  • Melhor utilização de recursos: Não cria múltiplas threads ou processos, o que reduz os custos adicionais.
  • Manutenção da capacidade de resposta: O fluxo principal não fica bloqueado, o que é importante para aplicações interativas ou servidores.

A programação assíncrona é adequada para:

  • Servidores web (por exemplo, usando asyncio ou FastAPI).
  • Parsing de websites.
  • Trabalhar com bases de dados.
  • Qualquer tarefa relacionada com a espera de recursos externos.