python-async-ops
/python-async-ops
Python asyncio patterns for concurrent programming. Triggers on: asyncio, async, await, coroutine, gather, semaphore, TaskGroup, event loop, aiohttp, concurrent.
- Author
- 0xDarkMatter ↗
- Repository
- claude-mods ↗
- Licence
- MIT
- Last repository change
- 15.10.2026
Assessment and security
- Files in this package
- 10
- Scripts
- 2
- HTML comments
- 0
- URLs in SKILL.md
- 1
No signals detected. Repository changed on 15.10.2026, without references to retired models or APIs.
MIT, open: use and modify while retaining author attribution.
- 2 scripts in this package. Review them before installing, as Claude may execute them.
Scripts: assets/async-project-template.py, scripts/find-blocking-calls.sh
What it does and when to use it
Python asyncio patterns for concurrent programming. Triggers on: asyncio, async, await, coroutine, gather, semaphore, TaskGroup, event loop, aiohttp, concurrent.
Original author description
Python asyncio patterns for concurrent programming. Triggers on: asyncio, async, await, coroutine, gather, semaphore, TaskGroup, event loop, aiohttp, concurrent.
How it works
- When to Use Async vs Sync
- Core Concepts
- Pattern 1: Concurrent with gather
- Pattern 2: Bounded Concurrency
- Pattern 3: TaskGroup (Python 3.11+)
- Pattern 4: Timeout
- Critical Warnings
- Quick Reference
- Async Context Manager
- Additional Resources
SKILL.md preview
---
name: python-async-ops
description: "Python asyncio patterns for concurrent programming. Triggers on: asyncio, async, await, coroutine, gather, semaphore, TaskGroup, event loop, aiohttp, concurrent."
license: MIT
compatibility: "Python 3.10+ recommended. Some patterns require 3.11+ (TaskGroup, timeout)."
allowed-tools: "Read Write"
metadata:
author: claude-mods
depends-on: python-typing-ops
related-skills: python-fastapi-ops, python-observability-ops
---
# Python Async Patterns
Asyncio patterns for concurrent Python programming.
## When to Use Async vs Sync
| 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:**
1. Is it CPU-bound? → Sync (or multiprocessing)
2. Is it I/O-bound with high concurrency? → Async
3. Is it simple I/O with few connections? → Sync is fine
## Core Concepts
```python
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())
```
## Pattern 1: Concurrent with gather
```python
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)
```
## Pattern 2: Bounded Concurrency
```python
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])
```
## Pattern 3: TaskGroup (Python 3.11+)
```python
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
```
## Pattern 4: Timeout
```python
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
```
## Critical Warnings
```python
# 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)
```
```python
# 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
```
## Quick Reference
| 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 |
## Async Context Manager
```python
from contextlib import asynccontextmanager
@asynccontextmanager
async def managed_connection():
conn = await create_connection()
try:
yield conn
finally:
await conn.close()
```
## Additional Resources
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
- `./scripts/find-blocking-calls.sh` - Scan code for blocking calls in async functions
## Assets
- `./assets/async-project-template.py` - Production-ready async app skeleton
---
## See Also
**Prerequisites:**
- `python-typing-ops` - Type hints for async functions
**Related Skills:**
- `python-fastapi-ops` - Async web APIs
- `python-observability-ops` - Async logging and tracing
- `python-database-ops` - Async database access
Files in this package (10)
- SKILL.md 5 KB
- assets/async-project-template.py 4 KB
- references/aiohttp-patterns.md 6 KB
- references/concurrency-patterns.md 6 KB
- references/debugging-async.md 6 KB
- references/error-handling.md 12 KB
- references/mixing-sync-async.md 6 KB
- references/performance.md 10 KB
- references/production-patterns.md 10 KB
- scripts/find-blocking-calls.sh 1 KB
Versions
The database has no other skills named python-async-ops.
Database snapshot: 13.11.2026 · package version 188935792ef0 (SHA-256 digest of the entire package)
Downloads in the last 30 days: 0 · ranking
Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.
Similar skills
- 100python-async
Async Python patterns via asyncio and aiohttp for I/O-bound concurrency. Use when adding async APIs, handling concurrent I/O, or debugging async code. - 100python-asyncio-pitfalls
Use when debugging asyncio event-loop hangs, blocking calls inside coroutines, asyncio.gather vs TaskGroup choice, cancellation handling, structured concurrency, mixing sync and async, run_in_executor decisions, asyncio task lifetimes, "Task was destroyed but it is pending"… - 100async-python-patterns
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. - 100async-python-patterns
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. - 100async-python-patterns
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. - 95python-async-patterns
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.