async/await

用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,
然后在coroutine内部用yield from调用另一个coroutine实现异步操作。

从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。
async/await:

把@asyncio.coroutine替换为async;
把yield from替换为await。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import asyncio
def ():
print("Hello world!")
r = yield from asyncio.sleep(1)
print("Hello again!")
loop = asyncio.get_event_loop()
loop.run_until_complete(hello())
async def ():
print("Hello world!")
r = await asyncio.sleep(1)
print("Hello again!")
loop = asyncio.get_event_loop()
loop.run_until_complete(hello())
loop.close()