async-python-patterns
Faz seu agente usar programação assíncrona e concorrência em Python. É útil para criar aplicações rápidas e que lidam com muitas operações ao mesmo tempo.
O que ela faz
Ajuda a criar programas de computador mais rápidos e eficientes usando Python. Ele permite que o programa faça várias coisas ao mesmo tempo sem travar, especialmente quando precisa esperar por algo (como dados da internet).
Quando usar
- ✓Criar sites ou aplicativos que precisam responder rapidamente.
- ✓Baixar muitas informações da internet de uma vez.
- ✓Fazer o programa esperar por algo sem parar todo o resto.
Exemplo do que pedir para a IA
“Como faço para meu programa Python baixar várias páginas da web ao mesmo tempo?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele usa um 'loop de eventos' para gerenciar tarefas. Quando uma tarefa precisa esperar, o loop passa para outra. As funções especiais `async` e `await` ajudam a organizar essas pausas e retomadas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill async-python-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/async-python-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões Async em Python
Orientação abrangente para implementar aplicações Python assíncronas usando asyncio, padrões de programação concorrente e async/await para construir sistemas de alta performance e não bloqueantes.
Quando Usar Esta Habilidade
- Construir APIs web assíncronas (FastAPI, aiohttp, Sanic)
- Implementar operações de I/O concorrentes (banco de dados, arquivo, rede)
- Criar web scrapers com requisições concorrentes
- Desenvolver aplicações em tempo real (servidores WebSocket, sistemas de chat)
- Processar múltiplas tarefas independentes simultaneamente
- Construir microsserviços com comunicação assíncrona
- Otimizar cargas de trabalho limitadas por I/O
- Implementar tarefas e filas assíncronas em segundo plano
Guia de Decisão Sync vs Async
Antes de adotar o async, considere se é a escolha certa para o seu caso de uso.
| Caso de Uso | Abordagem Recomendada |
|---|---|
| Muitas chamadas de rede/DB concorrentes | asyncio |
| Computação limitada por CPU | multiprocessing ou thread pool |
| Mistura de I/O + CPU | Descarregar trabalho de CPU com asyncio.to_thread() |
| Scripts simples, poucas conexões | Sync (mais simples, mais fácil de depurar) |
| APIs web com alta concorrência | Frameworks Async (FastAPI, aiohttp) |
Regra Chave: Mantenha-se totalmente sync ou totalmente async dentro de um caminho de chamada. Misturar cria bloqueios ocultos e complexidade.
Conceitos Principais
1. Event Loop
O event loop é o coração do asyncio, gerenciando e agendando tarefas assíncronas.
Características chave:
- Multitarefa cooperativa single-threaded
- Agenda corrotinas para execução
- Lida com operações de I/O sem bloquear
- Gerencia callbacks e futures
2. Corrotinas
Funções definidas com async def que podem ser pausadas e retomadas.
Sintaxe:
async def my_coroutine():
result = await some_async_operation()
return result
3. Tarefas (Tasks)
Corrotinas agendadas que rodam concorrentemente no event loop.
4. Futures
Objetos de baixo nível representando resultados eventuais de operações assíncronas.
5. Gerenciadores de Contexto Async
Recursos que suportam async with para limpeza adequada.
6. Iteradores Async
Objetos que suportam async for para iterar sobre fontes de dados assíncronas.
Início Rápido
import asyncio
async def main():
print("Hello")
await asyncio.sleep(1)
print("World")
# Python 3.7+
asyncio.run(main())
Padrões Fundamentais
Padrão 1: Async/Await Básico
import asyncio
async def fetch_data(url: str) -> dict:
"""Fetch data from URL asynchronously."""
await asyncio.sleep(1) # Simulate I/O
return {"url": url, "data": "result"}
async def main():
result = await fetch_data("https://api.example.com")
print(result)
asyncio.run(main())
Padrão 2: Execução Concorrente com gather()
import asyncio
from typing import List
async def fetch_user(user_id: int) -> dict:
"""Fetch user data."""
await asyncio.sleep(0.5)
return {"id": user_id, "name": f"User {user_id}"}
async def fetch_all_users(user_ids: List[int]) -> List[dict]:
"""Fetch multiple users concurrently."""
tasks = [fetch_user(uid) for uid in user_ids]
results = await asyncio.gather(*tasks)
return results
async def main():
user_ids = [1, 2, 3, 4, 5]
users = await fetch_all_users(user_ids)
print(f"Fetched {len(users)} users")
asyncio.run(main())
Padrão 3: Criação e Gerenciamento de Tarefas
import asyncio
async def background_task(name: str, delay: int):
"""Long-running background task."""
print(f"{name} started")
await asyncio.sleep(delay)
print(f"{name} completed")
return f"Result from {name}"
async def main():
# Create tasks
task1 = asyncio.create_task(background_task("Task 1", 2))
task2 = asyncio.create_task(background_task("Task 2", 1))
# Do other work
print("Main: doing other work")
await asyncio.sleep(0.5)
# Wait for tasks
result1 = await task1
result2 = await task2
print(f"Results: {result1}, {result2}")
asyncio.run(main())
Padrão 4: Tratamento de Erros em Código Async
import asyncio
from typing import List, Optional
async def risky_operation(item_id: int) -> dict:
"""Operação que pode falhar."""
await asyncio.sleep(0.1)
if item_id % 3 == 0:
raise ValueError(f"Item {item_id} falhou")
return {"id": item_id, "status": "success"}
async def safe_operation(item_id: int) -> Optional[dict]:
"""Wrapper com tratamento de erros."""
try:
return await risky_operation(item_id)
…
Perguntas frequentes
Qual a diferença entre 'sync' e 'async'?
'Sync' (síncrono) é como fazer uma fila: uma coisa de cada vez. 'Async' (assíncrono) é como ter vários garçons: eles pegam pedidos, levam para a cozinha e atendem outras mesas enquanto esperam, sem parar tudo.
O que é 'coroutine'?
É uma função especial em Python (marcada com `async def`) que pode ser pausada e retomada, permitindo que o programa faça outras coisas enquanto ela espera.
Quando NÃO devo usar 'async'?
Se o seu programa faz muitos cálculos pesados (em vez de esperar por internet/disco), usar 'async' pode não ajudar e até complicar. Nesses casos, outras técnicas podem ser melhores.
Detalhes
Descrição original do autor
Master Python asyncio, concurrent programming, and async/await patterns for high-performance applications. Use when building async APIs, concurrent systems, or I/O-bound applications requiring non-blocking operations.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4922
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC