Python 将同步函数定义为异步并等待它有什么好处吗?

Python 将同步函数定义为异步并等待它有什么好处吗?,python,python-asyncio,Python,Python Asyncio,假设我有一个定义如下的函数: def f(x, y): sum = x + y return sum 我在另一个协同程序(如g)中使用此函数: async def g(): . sum = f(2, 3) . 将f定义为一个协程并在g中等待它有什么好处,或者结果是一样的 async def g(): . sum = await f(2, 3) . 它的区别有两方面: 额外的等待在代码中引入了一个中断,其他异步任务有机会执行;异

假设我有一个定义如下的函数:

def f(x, y):
    sum = x + y
    return sum
我在另一个协同程序(如g)中使用此函数:

async def g():
    .
    sum = f(2, 3)
    .
将f定义为一个协程并在g中等待它有什么好处,或者结果是一样的

async def g():
    .
    sum = await f(2, 3)
    .

它的区别有两方面:

额外的等待在代码中引入了一个中断,其他异步任务有机会执行;异步任务的运行时间不应该太长,这会产生任何实际的影响,但你已经做到了

您正在为异步执行准备代码,如果将f作为回调传递,则会产生不同:

async def g(f):
    sum = await f(2, 3)
即使f现在不是异步的,您也可以在将来将其重构为异步的,并且该接口将继续工作而不做任何更改。这对你是否有实际意义,由你自己决定


我认为没有任何好处。异步应该用于实际异步的事物。@Barmar,那么在您看来,在异步函数g中使用同步函数f可以吗?大概您一直在异步函数中使用同步函数,不是吗?如果您只是调用str,那么您已经在异步函数中使用了同步函数。如果没有令人信服的理由使f异步,那么就不要。从未使用过asyncio,所以有一个问题,如果f函数中没有任何让步,等待f将如何提供另一个断点?@Javed。没关系,我猜wait将返回corroutine,它将在另一个eventloop循环中被调用sense@deceze,你能再解释一下断裂部分吗?我也在想类似的事情。如果我在等待时将f定义为异步,那么控件将返回到事件循环。所以其他协同程序有机会执行。但是,当它是一个同步函数时,所有这些时间,其他协同程序都在等待f完成。这是真的吗?如果是这样的话,这对整体来说不是很有帮助吗?wait表达式本身暂停了g的执行。我必须承认,我不能完全确定是否有任何其他协同程序可以或将被安排在暂停和评估f协同程序之间执行。请恕我直言。在你的第二个要点中,函数f必须返回一个等待的对象,否则你会得到一个异常。通常这意味着f必须是一个用async def声明的函数,但也有其他可能。如果说您正在准备异步的代码,这有点令人困惑;事实上,您要求它是异步的。