Python Async Best Practices
Guidelines for writing and reviewing asyncio code. 5 rules in 1 category, prioritized by impact.
A rule match is a signal, not a verdict. These failures typically pass single-request smoke tests and surface under load — weigh the rule against the code's real concurrency profile.
Quick-reference lines are triggers, not licenses: before applying a rule as a review finding or a transformation, open the rule file and check its counter-signal — the marker-opened paragraph (**When ...** / **Scope:** / **Keep ...**) saying when NOT to apply it.
When to Apply
- Writing or reviewing
async defcode, task spawning, or streaming consumers - Auditing an async service for blocking calls or unbounded fan-out
- Debugging hangs, orphaned tasks, or unraisable warnings at teardown
Impact Levels
HIGH— stalls or silent failures affecting every task on the loop. Fix when found.MEDIUM— resource and cleanup discipline; apply to new code and code under review.
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Concurrency & Async | MEDIUM-HIGH | async- |
Quick Reference
Concurrency & Async (async-)
async-no-blocking-event-loop— No sync I/O, sleeps, or heavy CPU inasync def;asyncio.to_threadfor blocking callsasync-own-your-tasks—TaskGroupby default; hold references and cancel-then-drain longer-lived tasksasync-bound-concurrency— Semaphore/queue bounds when fan-out scales with input sizeasync-generator-cleanup—aclosing()/ explicitaclose()when leaving an async generator earlyasync-preserve-cancellation— Cancellation is control flow: cleanup, then re-raise; never a logged failure
Related Skills
python-best-practices— production Python generally; itserror-specific-exceptionsrule covers broad-catch hygiene and points here for asyncio cancellation depth.python-pytest—determinism-sync-not-sleepapplies these ideas to concurrency tests.
How to Use
Read individual rule files for detail:
rules/async-no-blocking-event-loop.md
rules/async-own-your-tasks.md
Each rule has:
- Impact level in frontmatter
- Brief explanation
- Incorrect example
- Correct example
- Optional note on edge cases
For the full compiled guide with all rules expanded: AGENTS.md.