skills/python-async-ops/SKILL.md
Python asyncio patterns for concurrent programming. Triggers on: asyncio, async, await, coroutine, gather, semaphore, TaskGroup, event loop, aiohttp, concurrent.
npx skillsauth add 0xDarkMatter/claude-mods python-async-opsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Asyncio patterns for concurrent Python programming.
| Use Async When | Use Sync When | |----------------|---------------| | I/O-bound operations (HTTP, DB, files) | CPU-bound computations | | High concurrency (100s+ connections) | Simple scripts, one-off tasks | | WebSocket/streaming connections | Small data processing | | Microservices with network calls | Single sequential operations |
Decision tree:
import asyncio
# Coroutine (must be awaited)
async def fetch(url: str) -> str:
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
# Entry point
async def main():
result = await fetch("https://example.com")
return result
asyncio.run(main())
async def fetch_all(urls: list[str]) -> list[str]:
"""Fetch multiple URLs concurrently."""
async with aiohttp.ClientSession() as session:
tasks = [fetch_one(session, url) for url in urls]
return await asyncio.gather(*tasks, return_exceptions=True)
async def fetch_with_limit(urls: list[str], limit: int = 10):
"""Limit concurrent requests."""
semaphore = asyncio.Semaphore(limit)
async def bounded_fetch(url):
async with semaphore:
return await fetch_one(url)
return await asyncio.gather(*[bounded_fetch(url) for url in urls])
async def process_items(items):
"""Structured concurrency with automatic cleanup."""
async with asyncio.TaskGroup() as tg:
for item in items:
tg.create_task(process_one(item))
# All tasks complete here, or exception raised
async def with_timeout():
try:
async with asyncio.timeout(5.0): # Python 3.11+
result = await slow_operation()
except asyncio.TimeoutError:
result = None
return result
# WRONG - blocks event loop
async def bad():
time.sleep(5) # Never use time.sleep!
requests.get(url) # Blocking I/O!
# CORRECT
async def good():
await asyncio.sleep(5)
async with aiohttp.ClientSession() as s:
await s.get(url)
# WRONG - orphaned task
async def bad():
asyncio.create_task(work()) # May be garbage collected!
# CORRECT - keep reference
async def good():
task = asyncio.create_task(work())
await task
| Pattern | Use Case |
|---------|----------|
| gather(*tasks) | Multiple independent operations |
| Semaphore(n) | Rate limiting, resource constraints |
| TaskGroup() | Structured concurrency (3.11+) |
| Queue() | Producer-consumer |
| timeout(s) | Timeout wrapper (3.11+) |
| Lock() | Shared mutable state |
from contextlib import asynccontextmanager
@asynccontextmanager
async def managed_connection():
conn = await create_connection()
try:
yield conn
finally:
await conn.close()
For detailed patterns, load:
./references/concurrency-patterns.md - Queue, Lock, producer-consumer./references/aiohttp-patterns.md - HTTP client/server patterns./references/mixing-sync-async.md - run_in_executor, thread pools./references/debugging-async.md - Debug mode, profiling, finding issues./references/production-patterns.md - Graceful shutdown, health checks, signal handling./references/error-handling.md - Retry with backoff, circuit breakers, partial failures./references/performance.md - uvloop, connection pooling, buffer sizing./scripts/find-blocking-calls.sh - Scan code for blocking calls in async functions./assets/async-project-template.py - Production-ready async app skeletonPrerequisites:
python-typing-ops - Type hints for async functionsRelated Skills:
python-fastapi-ops - Async web APIspython-observability-ops - Async logging and tracingpython-database-ops - Async database accesstesting
Audit any repo against the agentic-quality doctrine — score entry docs, structure, and enforcement gates, then map each finding to its fix. Triggers on: repo doctor, repo audit, agentic quality, is this repo agent-friendly, doc drift, stale AGENTS.md, monorepo structure, nested CLAUDE.md.
data-ai
Router for parallel or recurring agent work across six skills. Covers: parallel agents, fan out work, delegate to workers, run overnight, scheduled loop, land branches, mixed-model fleet, orchestrate workers, background agents at scale. Triggers on: which skill for parallel work, fan out agents, spawn workers, run this overnight, schedule a loop, land my branches, heterogeneous fleet, delegate to cheaper model, autonomous loop.
tools
Heterogeneous cross-provider fleet - GLM (z.ai), Codex (OpenAI), Grok (xAI), Anthropic Sonnet/Opus/Haiku - from one session, porting the native Workflow tool's patterns (adversarial verify, judge panels, journal resume) to OS-process workers. Triggers: fleetflow, heterogeneous/mixed-model fleet, codex worker, grok worker, cross-provider fan-out, cross-model verify.
development
Application/game-scale three.js: ES modules, GLTF pipeline (DRACO/KTX2/meshopt), AnimationMixer, physics (rapier/cannon-es), react-three-fiber, and performance at scale (InstancedMesh, LOD, draw calls). Triggers on: three.js, GLTFLoader, r3f, game loop, WebGL memory leak, boids.