Python中async与await用法的详解
在Python中,async
和await
是用于异步编程的关键字,自Python 3.5引入,目的是简化并发编程,使得编写异步代码更加直观和易于理解。这些关键字使得开发者能够编写看起来像同步代码的异步代码,但实际上在执行时不会阻塞,从而提高应用程序的性能,尤其是在IO密集型任务中。
一.async关键字
async
关键字用于声明一个函数为异步函数。异步函数也被称为“协程”,它的执行可以被暂停和恢复。异步函数使用async def
语法声明:
async def my_function():
pass
异步函数调用时不会立即执行,而是返回一个协程对象。这个协程对象必须通过事件循环来运行。
二.await关键字
await
关键字用于协程内部,用来挂起协程的执行,等待某个异步操作完成。await
后面跟的必须是一个可等待对象(如协程)。使用await
可以让当前的协程暂停执行,等待异步操作完成,期间事件循环可以执行其他任务。
async def fetch_data():
# 模拟异步操作,如从网络获取数据
data = await some_async_operation()
return data
三.使用示例
假设有一个异步函数fetch_data
,它模拟从网络获取数据的操作,这个操作可能会耗费一些时间。然后有另一个异步函数main
,它等待fetch_data
的结果:
import asyncio
async def fetch_data():
print("Start fetching")
await asyncio.sleep(2) # 模拟IO操作
print("Done fetching")
return {'data': 1}
async def main():
print("Before fetching")
result = await fetch_data()
print("Result:", result)
print("After fetching")
# 运行主函数
asyncio.run(main())
在这个例子中,asyncio.sleep(2)
模拟了一个异步IO操作,await
关键字使得协程在这里暂停执行,等待sleep
函数完成,这期间控制权返回给事件循环,可以处理其它任务。asyncio.run(main())
用来运行最顶层的协程,启动事件循环。
总的来说,async
和await
提供了一种更加优雅的方式来编写异步代码,使得代码既简洁又易于理解。
作者:NLP工程化