async/await

Posted 追梦的独行者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async/await相关的知识,希望对你有一定的参考价值。

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.coroutine
def 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!")

剩下的代码保持不变。

以上是关于async/await的主要内容,如果未能解决你的问题,请参考以下文章

Async/Await替代Promise的理由

promise与async和await的区别

Async/Await是这样简化JavaScript代码的

使用 Async/Await 控制哪些代码停止

如何优雅处理 async await 错误——解读小而美的 awaitjs 库

Gulp/Typescript/Async/Await 代码不起作用 - 为啥?