python3 asyncio:堆栈中的所有功能都必须使用await / async吗

时间:2019-05-09 23:40:16

标签: python-3.x python-asyncio

使用await/async时,它是否必须“一直向上移动”,也就是说,调用链中的每个函数都必须使用它吗?

例如:

def a():
    # can't call b() here

async def b():
    return await c

async def c():
    return ...

我最近在gevent下运行flask应用程序的情况下对此感到奇怪,该应用程序的端点之一是长时间运行的调用,应“检查”,而不会阻止其他调用

def handler0():
    # short running
    return ...

def handler():  # blocks handler0
    return await some_long_thing()

async def some_long_thinig():
    # ..do somethiing
    return ...

1 个答案:

答案 0 :(得分:0)

  

调用链中的每个函数都必须使用它吗?

使用asyncio模块时,将await用于某项功能的每个函数都定义为async(本身应该是协程)。

大多数顶级协程通常是脚本的主要入口点,并使用asyncio.run()或类似功能通过事件循环执行。

asyncio designed就是这样:这样,您可以始终知道在特定位置是否可以切换上下文。