# Maverick Python Async

> Python async/await patterns and asyncio best practices Use when this capability is needed.

- Skill: `tomevault-io/maverick-python-async` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/maverick-python-async`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/maverick-python-async/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/maverick-python-async

---


# Python Async/Await Skill

Expert guidance for asynchronous Python programming with asyncio.

## Core Concepts

### Async Functions (Coroutines)
```python
async def fetch_data(url: str) -> dict:
    """Async function returns a coroutine."""
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.json()
```

### Running Async Code
```python
import asyncio

# Python 3.7+
asyncio.run(main())

# Or event loop (older style)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```

## Common Patterns

### Concurrent Execution
```python
# gather - run concurrently, wait for all
results = await asyncio.gather(
    fetch_data(url1),
    fetch_data(url2),
    fetch_data(url3),
)

# create_task - run in background
task1 = asyncio.create_task(fetch_data(url1))
task2 = asyncio.create_task(fetch_data(url2))
result1 = await task1
result2 = await task2
```

### Timeouts
```python
try:
    result = await asyncio.wait_for(
        slow_operation(),
        timeout=5.0
    )
except asyncio.TimeoutError:
    print("Operation timed out")
```

### Async Context Managers
```python
async with aiohttp.ClientSession() as session:
    async with session.get(url) as response:
        data = await response.text()
```

### Async Iterators
```python
async for item in async_generator():
    process(item)
```

## Antipatterns

### ❌ Blocking Calls in Async Functions
```python
# BAD - blocks event loop
async def bad():
    time.sleep(1)  # BLOCKS!
    response = requests.get(url)  # BLOCKS!

# GOOD - use async alternatives
async def good():
    await asyncio.sleep(1)
    async with aiohttp.ClientSession() as session:
        response = await session.get(url)
```

### ❌ Not Awaiting Coroutines
```python
# BAD - coroutine never executes
async def bad():
    fetch_data()  # Missing await!

# GOOD
async def good():
    await fetch_data()
```

### ❌ Creating Too Many Tasks
```python
# BAD - creates 10000 tasks at once
tasks = [asyncio.create_task(fetch(url)) for url in urls]

# GOOD - use semaphore to limit concurrency
async def fetch_with_limit(url, semaphore):
    async with semaphore:
        return await fetch(url)

semaphore = asyncio.Semaphore(10)
tasks = [fetch_with_limit(url, semaphore) for url in urls]
```

## Review Severity

- **CRITICAL**: Blocking calls in async functions (time.sleep, requests.get)
- **MAJOR**: Missing await on coroutines, not handling asyncio.CancelledError
- **MINOR**: Not using async context managers, inefficient gather usage

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/get2knowio) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-15 -->

