Skip to main content

Python 3 小知识 - asyncio writable

Python 3 小知识 - asyncio writable

Python 3 小知识 - asyncio writable

在asyncio 中什么是 writable

在asyncio 中 writable 一般指的是 writable object

如果一个对象在await语句中使用,那么TA就是 writable object ,叫做可等待对象

在许多 asyncio API中,许多都被设计为 writable object

 

writable object 分为三种主要类型:Coroutines、Tasks和Futures

 

Coroutines

 

Coroutines 属于 writable object,因此可以在其他Coroutines中被等待:

比如如下代码

import asyncio

async def num():
    return 50

async def main():
    print(num())

    print(await num())

asyncio.run(main())

执行后的结果如下

$ python main.py
main.py:29: RuntimeWarning: coroutine 'num' was never awaited
  num()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
50

 

Tasks

Tasks 被用来设置日程以便 并发 执行Coroutines

 

当一个Coroutines通过 asyncio.create_task() 等函数被打包为一个 任务,该Coroutines将自动排入日程准备立即运行:

 

下面看如下实例代码

import asyncio

async def num():
    return 50

async def main():

    task = asyncio.create_task(num())

    print(await task)

asyncio.run(main())

执行后的结果如下

$ python main.py
50

 

Futures

 

Future 是一种特殊的 低层级 可等待对象,表示一个异步操作的 最终结果。

当一个 Future 对象 被等待,这意味着协程将保持等待直到该 Future 对象在其他地方操作完毕。

在 asyncio 中需要 Future 对象以便允许通过 async/await 使用基于回调的代码。

通常情况下 没有必要 在应用层级的代码中创建 Future 对象。

Future 对象有时会由库和某些 asyncio API 暴露给用户,用作可等待对象:

版权声明

版权声明

张大鹏 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/210