首页 > 解决方案 > 将同步函数定义为 async 并等待它有什么好处吗?

问题描述

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

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)
    .

标签: pythonpython-asyncio

解决方案


它的区别是双重的:

  • 附加await在您的代码中引入了“中断”,其他异步任务有机会执行;您的异步任务不应该运行如此长时间,以至于这会产生任何实际差异,但是您已经拥有了。

  • 您正在为异步执行准备代码,如果您f作为回调传递,这会有所不同:

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

    即使f现在不是异步的,您将来也可以将其重构为异步的,并且接口将继续工作而无需更改。这是否对您有任何实际意义取决于您自己决定。


推荐阅读