python为了将语义变得更加明确,关键字async用于定义原生协程
await后面的是Awaitable函数,await 可以理解为yield from
async实现了__await__方法
@types.coroutine 装饰普通生成器实现await方法
# from collections import Awaitable
import types
async def downloader(url):
return "bobby"
@types.coroutine # 装饰普通生成器实现await方法
def downloader(url): # bject generator can't be used in 'await' expression
yield "bobby"
async def download_url(url):
# 将控制权交出去,并等待它的返回
html = await downloader(url) # await可以理解为yield from
return html
if __name__ == '__main__':
coro = download_url("http://www.baidu.com")
coro.send(None)# 原生协程不能用next只能用send