首页 > 解决方案 > python asycio协程可以有没有等待的代码路径吗?

问题描述

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

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

import asyncio
import inspect

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

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

标签: pythonpython-3.xpython-asyncio

解决方案


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

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


推荐阅读