No mundo real, um restaurante com apenas um cozinheiro pode atender vários clientes ao mesmo tempo: enquanto um prato assa no forno, o cozinheiro prepara outro. Isso é trabalho assíncrono.
No Python, a programação assíncrona nos permite executar múltiplas tarefas em paralelo (ou melhor, quase paralelo) sem precisar esperar que cada uma termine para começar a próxima — ideal para chamadas de API, consultas a banco de dados e processamento de arquivos.
O que é programação assíncrona?
Em um programa tradicional (síncrono), cada instrução só começa depois que a anterior termina.
Na programação assíncrona:
Algumas operações podem “esperar” (ex.: aguardar resposta de uma API).
Enquanto esperam, o Python pode executar outras tarefas.
Isso reduz tempo ocioso e aumenta a eficiência, principalmente em aplicações que fazem muitas operações de I/O.
O módulo asyncio
O asyncio é a biblioteca nativa do Python para lidar com programação assíncrona.
Com ele, você:
Declara funções assíncronas usando
Aguarda resultados com await.
Executa múltiplas funções com asyncio.gather().
Criando um projeto prático
Neste exemplo, vamos simular o download de páginas web usando aiohttp para trabalhar de forma assíncrona.
Criar e ativar o ambiente virtual
python3 -m venv .venv
No Linux/macOS: source .venv/bin/activate
No Windows: .venv\Scripts\activate
Instalar dependências
pip install aiohttp
Código exemplo: Download assíncrono
Entendendo o código
async def : cria uma função assíncrona.
await : pausa a função até que o resultado esteja pronto, sem travar o resto do programa.
asyncio.gather() : executa várias tarefas ao mesmo tempo.
aiohttp : biblioteca otimizada para requisições HTTP assíncronas.
Comparando com o código síncrono
Se fizéssemos as requisições uma de cada vez, o tempo total seria a soma de todos os tempos individuais.
No modo assíncrono, todas começam juntas, reduzindo drasticamente o tempo de espera.
Quando usar programação assíncrona?
A programação assíncrona é especialmente útil quando seu código precisa:
- Fazer várias requisições HTTP.
- Ler ou gravar muitos arquivos.
- Processar grandes volumes de dados que dependem de I/O.
Para cálculos pesados (CPU-bound), a programação assíncrona não é a melhor opção — nesse caso, usar múltiplos processos (multiprocessing) ou threads pode ser mais eficiente.
Considerações finais
Com o asyncio, conseguimos transformar tarefas demoradas em operações rápidas e eficientes, aproveitando melhor o tempo de execução do programa.
Feito!
Nenhum comentário:
Postar um comentário