Async HTTP with aiohttp
Why aiohttp
The requestsrequests library is blocking.
For asyncio, you typically use:
aiohttpaiohttp
It supports non-blocking HTTP requests.
Basic GET
aiohttp_get.py
import asyncio
import aiohttp
async def main():
timeout = aiohttp.ClientTimeout(total=10)
async with aiohttp.ClientSession(timeout=timeout) as session:
async with session.get("https://api.github.com") as resp:
data = await resp.json()
print(resp.status)
print(list(data.keys())[:5])
asyncio.run(main())aiohttp_get.py
import asyncio
import aiohttp
async def main():
timeout = aiohttp.ClientTimeout(total=10)
async with aiohttp.ClientSession(timeout=timeout) as session:
async with session.get("https://api.github.com") as resp:
data = await resp.json()
print(resp.status)
print(list(data.keys())[:5])
asyncio.run(main())Fetch many URLs concurrently
aiohttp_many.py
import asyncio
import aiohttp
async def fetch(session: aiohttp.ClientSession, url: str) -> int:
async with session.get(url) as resp:
await resp.read()
return resp.status
async def main():
urls = [
"https://httpbin.org/delay/1",
"https://httpbin.org/delay/1",
"https://httpbin.org/delay/1",
]
timeout = aiohttp.ClientTimeout(total=5)
async with aiohttp.ClientSession(timeout=timeout) as session:
statuses = await asyncio.gather(*(fetch(session, u) for u in urls), return_exceptions=True)
print(statuses)
asyncio.run(main())aiohttp_many.py
import asyncio
import aiohttp
async def fetch(session: aiohttp.ClientSession, url: str) -> int:
async with session.get(url) as resp:
await resp.read()
return resp.status
async def main():
urls = [
"https://httpbin.org/delay/1",
"https://httpbin.org/delay/1",
"https://httpbin.org/delay/1",
]
timeout = aiohttp.ClientTimeout(total=5)
async with aiohttp.ClientSession(timeout=timeout) as session:
statuses = await asyncio.gather(*(fetch(session, u) for u in urls), return_exceptions=True)
print(statuses)
asyncio.run(main())Notes
- Use timeouts.
- Handle non-200 responses.
- Avoid hitting API rate limits (use semaphores).
๐งช Try It Yourself
Exercise 1 โ Your First Coroutine
Exercise 2 โ await asyncio.sleep
Exercise 3 โ Gather Two Coroutines
If this helped you, consider buying me a coffee โ
Buy me a coffeeWas this page helpful?
Let us know how we did
