Python3 async def和@asyncio.coroutine的区别

来源:互联网 发布:vpn mac版本 编辑:程序博客网 时间:2024/06/06 03:24

转载自http://blog.csdn.net/youzhouliu/article/details/51965036

其实这边文章是廖雪峰Python教程中的一节https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00144661533005329786387b5684be385062a121e834ac7000

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

为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法asyncawait,可以让coroutine的代码更简洁易读。

请注意,asyncawait是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换:

  1. @asyncio.coroutine替换为async
  2. yield from替换为await

让我们对比一下上一节的代码:

@asyncio.coroutinedef hello():    print("Hello world!")    r = yield from asyncio.sleep(1)    print("Hello again!")

用新语法重新编写如下:

async def hello():    print("Hello world!")    r = await asyncio.sleep(1)    print("Hello again!")

剩下的代码保持不变。

原创粉丝点击