async 与 await

asyncawait 是用于编写异步代码的关键字,允许程序在执行 I/O 操作(如网络请求、文件读写等)时不阻塞其他代码的执行。这样可以提高程序的并发性能,使其在处理多个任务时更加高效。

async 用于定义一个异步函数(协程),而 await 用于暂停协程的执行,等待某个耗时操作完成。通过这种方式,程序可以在等待过程中执行其他任务。

以下是一个简单的 Python 异步编程示例,展示如何使用 asyncawait

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() 来启动事件循环并运行协程。

posted @ 2024-12-25 10:16  Undefined443  阅读(33)  评论(0)    收藏  举报