代码路径不包含 await 语句的协程是否有任何问题或副作用?
请考虑以下示例,其中向协程提供回调作为参数,但该回调可以是常规函数或协程:
import asyncio
import inspect
async def foo(mycallback):
if inspect.iscoroutinefunction(mycallback):
await mycallback()
else:
mycallback()
...
在python控制台中尝试简单的示例似乎表明没有问题,但想知道是否可能会出现更微妙的问题。
如果你不等待,那么你就会阻止应该运行的其他代码,因为异步是关于共享资源。因此,如果常规代码运行得很快,这不是什么大问题,但如果它可以很慢,它会阻止一切。
在常规代码中,异步的替代方法是基于线程的编程。在这里,Python 会在感觉像运行其他线程时中断您的代码,因此您遇到的阻塞问题更少。