# Async Basics — Python

Source: https://www.geekswithgeeks.com/en/python/py-async-basics

> Run I/O-bound work concurrently without threads, using async/await.

## Why async?

`async`/`await` let a program work on other tasks while one is **waiting** — e.g. for a network response — instead of blocking everything.

## A minimal example

An `async def` function is a **coroutine**. `await` pauses it at a slow operation; `asyncio.run` starts the whole thing.

```python
import asyncio

async def fetch_data(name, delay):
    print(f"{name}: starting")
    await asyncio.sleep(delay)   # simulate I/O wait
    print(f"{name}: done")

async def main():
    await asyncio.gather(
        fetch_data("A", 2),
        fetch_data("B", 1),
    )

asyncio.run(main())
```

Output:

```
A: starting
B: starting
B: done
A: done
```
