python asycio 协程可以有一个没有等待的代码路径吗?



代码路径不包含 await 语句的协程是否有任何问题或副作用?

请考虑以下示例,其中向协程提供回调作为参数,但该回调可以是常规函数或协程:

import asyncio
import inspect
async def foo(mycallback):
if inspect.iscoroutinefunction(mycallback):
await mycallback()
else:
mycallback()
...

在python控制台中尝试简单的示例似乎表明没有问题,但想知道是否可能会出现更微妙的问题。

如果你不等待,那么你就会阻止应该运行的其他代码,因为异步是关于共享资源。因此,如果常规代码运行得很快,这不是什么大问题,但如果它可以很慢,它会阻止一切。

在常规代码中,异步的替代方法是基于线程的编程。在这里,Python 会在感觉像运行其他线程时中断您的代码,因此您遇到的阻塞问题更少。

最新更新