async 与 await
async 和 await 是用于编写异步代码的关键字,允许程序在执行 I/O 操作(如网络请求、文件读写等)时不阻塞其他代码的执行。这样可以提高程序的并发性能,使其在处理多个任务时更加高效。
async 用于定义一个异步函数(协程),而 await 用于暂停协程的执行,等待某个耗时操作完成。通过这种方式,程序可以在等待过程中执行其他任务。
以下是一个简单的 Python 异步编程示例,展示如何使用 async 和 await:
import asyncio
# 定义一个异步函数(协程)
async def task(name, delay):
print(f"Task {name} 开始")
await asyncio.sleep(delay) # 模拟一个耗时任务
print(f"Task {name} 完成")
return f"结果 {name}"
async def main():
# 使用 gather 同时运行多个任务
results = await asyncio.gather(
task("A", 2),
task("B", 1),
task("C", 3)
)
print("所有任务完成")
print(results)
# 运行事件循环
asyncio.run(main())
-
只有协程才能调用协程。调用方法是
await task()。当执行
await task()时,当前协程(调用await的协程)会将控制权交回给事件循环。事件循环会将
task协程加入调度队列,并可能立即开始执行task,但这取决于事件循环的当前状态和其他任务的优先级。如果
task需要等待某些异步操作(比如 I/O 操作)完成,事件循环会在等待期间切换去执行其他准备就绪的任务。一旦
task完成,它会把控制权交还给事件循环,事件循环再继续执行await task()之后的代码。 -
如果要在非异步函数中调用协程,需要使用
asyncio.run()来启动事件循环并运行协程。

浙公网安备 33010602011771号