---
# System prepended metadata

title: 'Python 中的 async, await 是什麼東西？'

---

# Python 中的 async, await 是什麼東西？

## 一個範例

```python=
import asyncio
import time

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")

    await say_after(1, 'hello')
    await say_after(2, 'world')

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())
```

執行這個範例之後會發現 ```say_after(1, 'hello')``` 跟 ```say_after(2, 'world')```仍然是照順序執行的。

```async def``` 的意思是說這個 function 可以被 concurrent 的執行
```await``` 則是再說這個 ```async``` 的 function 執行時，可以去作其他的事情。

## 範例二

```python=
async def main():
    task1 = asyncio.create_task(
        say_after(1, 'hello'))

    task2 = asyncio.create_task(
        say_after(2, 'world'))

    print(f"started at {time.strftime('%X')}")

    # Wait until both tasks are completed (should take
    # around 2 seconds.)
    await task1
    await task2

    print(f"finished at {time.strftime('%X')}")
```
可以看到這個範例中 ```task1``` 與 ```task2``` 就已經是平行執行了。