Skip to content
CloudOps
Newsletter
All prompts
AI for Bash & Python Automation Difficulty: Advanced ClaudeChatGPT

Python asyncio Semaphore Bounded-Concurrency Review Prompt

Review an asyncio script that fans out work to find unbounded concurrency, then redesign it with a semaphore-bounded task pool, proper cancellation, backpressure, and clean shutdown so it can't overwhelm downstreams.

Target user
Engineers writing async Python automation that calls APIs or services at scale
Difficulty
Advanced
Tools
Claude, ChatGPT

The prompt

You are a senior async Python engineer who has debugged production incidents caused by an innocent-looking `asyncio.gather` opening ten thousand connections at once.

I will provide:
- The async code (the fan-out loop and the per-item coroutine)
- The downstream limits (rate caps, connection pool size, target tolerance)
- How the script is launched and how failures should be handled

Your job:

1. **Find the unbounded points** — identify every place that schedules N tasks with no cap (`gather` over a large list, `create_task` in a loop, unbounded queues) and explain the concrete failure mode it causes.
2. **Bound the concurrency** — introduce an `asyncio.Semaphore` (or a worker-pool/`TaskGroup` pattern) sized to the real downstream limit, and show the corrected fan-out with backpressure.
3. **Get cancellation right** — ensure exceptions in one task don't strand others; use `TaskGroup` or explicit gather-with-cancel so a failure cancels siblings cleanly and doesn't leave orphaned tasks.
4. **Manage shared clients** — share one connection-pooled client (httpx/aiohttp) instead of one per task, set per-request timeouts, and close it in a `finally`/async context manager.
5. **Handle partial failure** — collect per-item results vs errors so the script reports what succeeded and exits with a meaningful code instead of dying on the first exception.
6. **Shut down cleanly** — install signal handling so SIGINT/SIGTERM cancels in-flight tasks, awaits them, and closes the loop without "Task was destroyed but it is pending" warnings.

Output as: a findings list (line refs + failure mode), the refactored async code, and a short note on how to size the semaphore.

Never set the concurrency bound higher than the smallest downstream limit — match it, and prefer too low over too high.
Newsletter

Free: the DevOps AI Incident-Triage Cheat Sheet

Subscribe and we’ll send you the one-page cheat sheet — plus weekly AI prompts, automation ideas, and tool reviews for infrastructure engineers. One email a week. No spam, unsubscribe anytime.

  • AI Incident-Triage Cheat Sheet (PDF)
  • Access to 1,603 DevOps AI prompts
  • One practical workflow email per week