async/await和yield的区别

发布时间 2023-07-27 15:47:45作者: On1on

Python中的异步IO实现有两种方式:async/await 和 yield。

Async/Await: Async/Await 是Python3.5版本引入的新的异步编程语法。使用 async/await 可以将一个函数标记为可暂停的异步函数,并且可以使用await关键字挂起函数的执行,等待异步操作完成后再继续执行。

示例代码:

async def async_func():
result = await async_io_operation()
# 操作完成后继续执行
return result

async def main():
result = await async_func()
print(result)

asyncio.run(main())
Yield: Yield 是Python的生成器函数的特性,也可以用于实现异步编程。通过 yield 关键字可以将函数执行暂停,返回一个值,并保留函数的状态,等待调用方继续调用。yield 和 yield from 可以实现协程的调度,但在Python 3.5之后,使用 async/await 更推荐。

示例代码:

def generator_func():
yield yield_io_operation()
# 操作完成后继续执行

def main():
gen = generator_func()
result = next(gen)
print(result)

main()
两种方式的区别:

语法:Async/Await 是Python 3.5之后引入的新语法,使用更加简洁明了。Yield 是Python早期就有的语法,相对而言更为复杂。
可读性:Async/Await 语法更加直观和清晰,易于理解和维护。
兼容性:Async/Await 是标准的异步编程方式,而且被广泛支持和使用。Yield方式往往需要借助额外的库来实现异步调度。
性能:Async/Await 是基于生成器实现的,基本上和Yield方式的性能差不多,但相比于一些庞大的Yield-based异步框架,Async/Await的性能更高。
综上所述,建议在使用Python进行异步编程时,优先选择Async/Await方式。