🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

Guia completo do Python asyncio 2026: assíncrono/espera, tarefas e padrões reais

⏱️3 min read  ·  473 words
Python asyncio Complete Guide 2026: Async/Await, Tasks & Real Patterns

PythonassíncioO módulo permite escrever código simultâneo usando a sintaxe async/await. Em 2026, o asyncio capacita FastAPI, Starlette e aiohttp. Este guia cobre tudo, desde loops de eventos até padrões do mundo real.

O que é assíncio?

asyncio usa um loop de eventos de thread único para gerenciar tarefas simultâneas — perfeito para E/S de rede e APIs onde você passa a maior parte do tempo esperando, não computando.

import asyncio

async def main():
    print('Hello asyncio!')
    await asyncio.sleep(1)
    print('Done!')

asyncio.run(main())

Sintaxe assíncrona/aguardada

Usarasync defpara definir uma corrotina. Usarawaitpara fazer uma pausa até que um resultado esteja pronto.

import asyncio

async def fetch_data(url: str) -> str:
    await asyncio.sleep(0.5)  # simulate network
    return f'Data from {url}'

async def main():
    result = await fetch_data('https://api.example.com')
    print(result)

asyncio.run(main())

Executando tarefas simultaneamente

asyncio.gather()executa várias corrotinas simultaneamente. Três tarefas de 1 segundo terminam em aproximadamente 1 segundo no total, não em 3.

import asyncio, time

async def task(name: str, delay: float):
    print(f'Start {name}')
    await asyncio.sleep(delay)
    return name

async def main():
    start = time.time()
    results = await asyncio.gather(
        task('A', 1.0),
        task('B', 2.0),
        task('C', 0.5),
    )
    print(f'Done in {time.time()-start:.2f}s: {results}')
    # ~2.0s not 3.5s

asyncio.run(main())

assíncrono com aiohttp

Busque 100 URLs simultaneamente, aproximadamente ao mesmo tempo que busca um.

import asyncio, aiohttp

async def fetch(session, url):
    async with session.get(url) as resp:
        return await resp.text()

async def main():
    urls = ['https://httpbin.org/delay/1'] * 5
    async with aiohttp.ClientSession() as session:
        results = await asyncio.gather(*[fetch(session, u) for u in urls])
    print(f'Fetched {len(results)} pages')

asyncio.run(main())

asyncio.Queue para Produtor-Consumidor

import asyncio

async def producer(q: asyncio.Queue):
    for i in range(5):
        await q.put(f'item-{i}')
        await asyncio.sleep(0.2)
    await q.put(None)  # sentinel

async def consumer(q: asyncio.Queue):
    while True:
        item = await q.get()
        if item is None: break
        print(f'Consumed {item}')

async def main():
    q = asyncio.Queue(maxsize=3)
    await asyncio.gather(producer(q), consumer(q))

asyncio.run(main())

Tratamento de erros

import asyncio

async def risky(n):
    if n == 2: raise ValueError(f'Task {n} failed!')
    return f'Task {n} OK'

async def main():
    results = await asyncio.gather(
        *[risky(i) for i in range(4)],
        return_exceptions=True
    )
    for r in results:
        print('Error:', r if isinstance(r, Exception) else r)

asyncio.run(main())

Melhores Práticas

  • Nunca usetime.sleep()— usarawait asyncio.sleep()
  • Evite bloquear E/S dentro de corrotinas
  • Usarasyncio.run()como ponto de entrada
  • Usarasyncio.TaskGroup(Python 3.11+) para simultaneidade estruturada
  • Depurar comPYTHONASYNCIODEBUG=1

Conclusão

asyncio é a resposta do Python à simultaneidade no estilo Node.js. Mestreasyncio.gather(), adicione filas quando necessário e vá para TaskGroup para obter limites de erro mais limpos. Perfeito para APIs, scrapers e microsserviços.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা