使用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 ...
答案 0 :(得分:0)
调用链中的每个函数都必须使用它吗?
使用asyncio
模块时,将await
用于某项功能的每个函数都定义为async
(本身应该是协程)。
大多数顶级协程通常是脚本的主要入口点,并使用asyncio.run()或类似功能通过事件循环执行。
asyncio
designed就是这样:这样,您可以始终知道在特定位置是否可以切换上下文。