【发布时间】:2019-02-25 05:57:46
【问题描述】:
如果我使用异步函数,那么堆栈上面的所有函数也应该是异步的,并且它们的调用前面应该有 await 关键字。此示例模拟具有应用程序的多个架构层的现代程序:
async def func1():
await asyncio.sleep(1)
async def func2():
await func1()
async def func3():
await func2()
async def func4():
await func3()
async def func5():
await func4()
当一个执行线程遇到'await'时,它可以切换到另一个协程,这需要资源进行上下文切换。由于有大量竞争的 corutes 和不同的抽象级别,这些开销可能会开始限制整个系统的性能。但是在给出的示例中,仅在一种情况下在线切换上下文是有意义的:
await asyncio.sleep(1)
如何禁止某些异步函数的上下文切换?
【问题讨论】:
-
请注意,
await本身不会导致协程切换。见Does await always give other tasks a chance to execute?
标签: python python-3.x asynchronous async-await python-asyncio