
A programação assíncrona pode parecer um bicho de sete cabeças no começo, mas, se você está aqui, é porque quer entender como ela funciona em Python e como o Asyncio pode mudar a forma como você escreve código.
Vou te explicar tudo de maneira prática e sem enrolação, como se estivéssemos batendo um papo sobre programação assíncrona em Python.
Se você já se deparou com códigos cheios de await
, async
, task
e não entendeu bem o que estava acontecendo, relaxa.
Até o final deste artigo, você terá um entendimento sólido sobre como rodar múltiplas tarefas ao mesmo tempo sem travar seu programa com Programação Assíncrona em Python.
Sumário do Artigo
O Que é Programação Assíncrona?
Programação Assíncrona em Python: Antes de mergulharmos no asyncio
, vamos entender o conceito de programação assíncrona.
Imagine que você está cozinhando e, enquanto a água do macarrão ferve, você aproveita para cortar os ingredientes do molho.
Você não precisa esperar a água ferver para começar o próximo passo, certo? Esse é o espírito da programação assíncrona!
Diferente do código síncrono tradicional, que executa uma linha por vez (esperando cada uma terminar antes de seguir para a próxima), o código assíncrono pode executar múltiplas tarefas simultaneamente.
Isso melhora a eficiência do seu programa, principalmente quando há operações que exigem espera, como:
✅ Acessar uma API na internet
✅ Ler ou gravar arquivos grandes
✅ Consultar um banco de dados
✅ Executar processos demorados
E é aí que o Asyncio entra em cena! 🎭
Confira também:
Programação Assíncrona em Python: O Que é Asyncio e Por Que Ele é Tão Poderoso?
Programação Assíncrona em Python: O asyncio
é uma biblioteca padrão do Python que permite escrever código assíncrono de forma simples e eficiente.
Com ele, podemos criar tarefas que rodam em paralelo e aproveitar melhor os recursos do computador.
O grande diferencial do asyncio
é que ele trabalha com um loop de eventos.
Ou seja, ele gerencia quando e como cada tarefa será executada, alternando entre elas sempre que houver um tempo de espera.
Isso evita que o programa fique “travado” enquanto espera uma resposta.
Confira também:
🌍 Código Síncrono vs. Código Assíncrono: Programação Assíncrona em Python
Para deixar tudo mais claro, veja um exemplo de código síncrono:
import time
def tarefa_demorada():
print("Iniciando tarefa...")
time.sleep(3) # Simula uma operação demorada
print("Tarefa finalizada!")
print("Início do programa")
tarefa_demorada()
print("Fim do programa")
⏳ O código acima fica parado durante 3 segundos antes de continuar. Agora veja a versão assíncrona usando asyncio
:
import asyncio
async def tarefa_demorada():
print("Iniciando tarefa...")
await asyncio.sleep(3) # Simula uma operação demorada, mas sem bloquear
print("Tarefa finalizada!")
async def main():
print("Início do programa")
await tarefa_demorada()
print("Fim do programa")
asyncio.run(main())
🔄 Aqui, enquanto a tarefa “dorme” (await asyncio.sleep(3)
), o Python pode continuar rodando outras partes do programa.
Confira também:
🛠 Como Criar Tarefas Assíncronas em Python: Programação Assíncrona em Python
Agora que você já entendeu os conceitos, vamos colocar a mão na massa!
🔹 Criando e Executando Múltiplas Tarefas
Vamos rodar várias funções ao mesmo tempo para ver como o asyncio
gerencia tudo:
import asyncio
async def tarefa(nome, tempo):
print(f"{nome} começou...")
await asyncio.sleep(tempo)
print(f"{nome} terminou após {tempo} segundos")
async def main():
# Criando várias tarefas assíncronas
tarefa1 = asyncio.create_task(tarefa("Tarefa 1", 2))
tarefa2 = asyncio.create_task(tarefa("Tarefa 2", 3))
tarefa3 = asyncio.create_task(tarefa("Tarefa 3", 1))
# Esperando todas finalizarem
await tarefa1
await tarefa2
await tarefa3
asyncio.run(main())
🔹 O que acontece aqui?
- Criamos três tarefas assíncronas.
- Todas começam quase ao mesmo tempo.
- O programa NÃO fica parado esperando uma de cada vez!
Essa abordagem é excelente para quando você precisa fazer múltiplas chamadas para APIs, processar arquivos ou qualquer outra coisa que envolva espera.
Confira também:
🔄 Paralelismo com gather()
Se quisermos iniciar e aguardar várias tarefas de forma mais elegante, podemos usar asyncio.gather()
:
async def main():
await asyncio.gather(
tarefa("Tarefa 1", 2),
tarefa("Tarefa 2", 3),
tarefa("Tarefa 3", 1),
)
asyncio.run(main())
Programação Assíncrona em Python: Essa abordagem é útil quando todas as tarefas são independentes, pois o código fica mais limpo e fácil de manter.
🌟 Quando Usar Asyncio?
O asyncio
é a melhor escolha quando seu código envolve operações de I/O demoradas, como:
✅ Chamadas de APIs externas
✅ Consultas a bancos de dados assíncronos
✅ Manipulação de arquivos grandes
✅ Conexões de rede (como servidores WebSockets)
No entanto, ele NÃO é a melhor opção para tarefas computacionais pesadas (ex: processamento de imagens ou cálculos matemáticos intensivos). Para isso, o ideal é usar multiprocessing.
🛑 Cuidados ao Usar Asyncio: Programação Assíncrona em Python
Mesmo sendo poderoso, o asyncio
tem algumas armadilhas:
⚠️ Não misture código síncrono e assíncrono sem um bom motivo.
⚠️ Nem todas as bibliotecas suportam asyncio, então verifique antes.
⚠️ Evite bloqueios dentro de funções assíncronas (time.sleep()
, por exemplo, deve ser substituído por asyncio.sleep()
).
Conclusão: Programação Assíncrona em Python
A programação assíncrona com asyncio
pode turbinar seu código e torná-lo muito mais eficiente.
Agora que você já entendeu os conceitos e viu exemplos práticos, experimente aplicá-los nos seus projetos!
Se este artigo te ajudou, compartilhe com seus amigos devs e deixe um comentário com suas dúvidas ou sugestões!