🔄 Async/Await

Asynchronous Programming

Asynchronous Programming

Async/await allows concurrent execution without threading. Perfect for I/O-bound tasks like network requests, file operations, or database queries.

💻 Basic Async Functions

import asyncio

# Define async function with 'async def'
async def fetch_data():
    print("Start fetching...")
    await asyncio.sleep(2)  # Simulate network delay
    print("Done fetching!")
    return {"data": "value"}

# Run async function
asyncio.run(fetch_data())

# Multiple concurrent tasks
async def task1():
    await asyncio.sleep(1)
    return "Task 1 done"

async def task2():
    await asyncio.sleep(2)
    return "Task 2 done"

async def main():
    # Run concurrently
    results = await asyncio.gather(task1(), task2())
    print(results)  # ['Task 1 done', 'Task 2 done']

asyncio.run(main())

🌐 Real-World Example

import aiohttp
import asyncio

async def fetch_url(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    urls = [
        'https://api.example.com/1',
        'https://api.example.com/2',
        'https://api.example.com/3',
    ]
    
    async with aiohttp.ClientSession() as session:
        tasks = [fetch_url(session, url) for url in urls]
        results = await asyncio.gather(*tasks)
        return results

# Fetch all URLs concurrently
asyncio.run(main())

🎯 Key Takeaways