Programação Assíncrona em Python: Guia Completo com asyncio

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Programação Assíncrona em Python

A programação assíncrona é uma forma de escrever código onde as tarefas não são executadas sequencialmente, mas sim de forma paralela ou aguardando eventos sem bloquear o fluxo principal de execução. Na programação moderna, o uso eficiente de recursos e tempo de execução das aplicações desempenha um papel fundamental.

A programação assíncrona permite:

  • Acelerar a execução de tarefas
  • Melhorar a responsividade dos programas
  • Utilizar racionalmente os recursos do sistema

Principais Vantagens da Assincronicidade

Áreas de Aplicação

A programação assíncrona é especialmente útil para operações de entrada e saída:

  • Trabalho com arquivos
  • Requisições de rede (HTTP API)
  • Interação com bancos de dados
  • Processamento de web sockets
  • Parsing de grandes volumes de dados

Diferenças do Multithreading

Ao contrário do multithreading, a assincronicidade não exige a criação de threads ou processos adicionais. Isso reduz a carga no sistema e evita problemas com bloqueios e sincronização de dados entre threads.

Como a Assincronicidade Funciona em Python

O Python oferece suporte nativo à programação assíncrona através do módulo asyncio, que foi oficialmente adicionado à biblioteca padrão a partir da versão 3.4.

Conceitos Fundamentais

  • async def — define uma função assíncrona (corrotina)
  • await — indica que é necessário aguardar a execução de uma corrotina
  • asyncio — módulo padrão para trabalhar com tarefas assíncronas
  • event loop — loop de processamento de eventos que gerencia a execução das corrotinas

Exemplo Básico de Função Assíncrona

import asyncio

async def saudacao():
    print("Olá!")
    await asyncio.sleep(1)
    print("Passou 1 segundo")

asyncio.run(saudacao())

Neste exemplo, await asyncio.sleep(1) simula a espera por uma operação que consome recursos, como uma requisição de rede.

Criação e Uso de Funções Assíncronas

Definição de uma Função Assíncrona

Para criar uma função assíncrona, use a palavra-chave async antes da definição da função:

async def buscar_dados():
    print("Solicitando dados...")
    await asyncio.sleep(2)
    print("Dados recebidos")

Chamando uma Função Assíncrona

A chamada de uma função assíncrona é feita através de asyncio.run():

asyncio.run(buscar_dados())

Execução Paralela de Múltiplas Tarefas

Usando asyncio.gather()

Para executar várias corrotinas em paralelo, use asyncio.gather():

async def tarefa(nome, atraso):
    print(f"Início da tarefa {nome}")
    await asyncio.sleep(atraso)
    print(f"Tarefa {nome} concluída")

async def main():
    await asyncio.gather(
        tarefa("A", 2),
        tarefa("B", 1),
        tarefa("C", 3)
    )

asyncio.run(main())

Formas Alternativas de Executar Tarefas

Além de asyncio.gather(), você pode usar:

  • asyncio.create_task() — para criar tarefas individuais
  • asyncio.wait() — para aguardar a conclusão de tarefas com configurações adicionais
  • asyncio.as_completed() — para obter resultados à medida que ficam prontos

Iteradores e Geradores Assíncronos

Criando um Iterador Assíncrono

Para processar fluxos de dados de forma assíncrona, use iteradores assíncronos:

class ContadorAssincrono:
    def __init__(self, max_contagem):
        self.max_contagem = max_contagem
        s                

Blogs

Book Recommendations