The event loop explanation here is clearer than most asyncio tutorials I have read. What clicked for me is your framing of coroutines as "pause and resume" — that mental model makes it obvious why CPU-bound work blocks the loop even inside an async function. We switched our API scraping pipeline from threads to asyncio and the connection management alone dropped our error rate by 40%.