在 Python 中,async 是异步编程的关键字,用于定义异步函数或异步代码块。异步编程是一种并发编程的方式,用来提高程序的执行效率,尤其是在处理 I/O 操作(如网络请求、文件读写)时。
主要概念
异步函数: 使用 async def 定义的函数称为异步函数。调用异步函数不会立即执行,而是返回一个协程对象,需要使用 await 或事件循环(如 asyncio.run)来执行。
import asyncio
async def say_hello():
print("Hello")
await asyncio.sleep(1) # 模拟异步操作
print("World")
asyncio.run(say_hello()) # 使用事件循环运行
await: 异步函数内部可以使用 await 关键字来挂起当前任务并等待另一个异步操作完成。await 后面通常跟随一个可等待对象(如协程对象、任务或异步生成器)。
async def main():
print("Start")
await asyncio.sleep(2) # 模拟异步等待
print("End")
asyncio.run(main())
异步并发: 异步编程允许多个任务同时进行,而不需要等待一个任务完全完成。例如,使用 asyncio.gather 可以并行运行多个协程。
async def task1():
print("Task 1 start")
await asyncio.sleep(2)
print("Task 1 end")
async def task2():
print("Task 2 start")
await asyncio.sleep(1)
print("Task 2 end")
asyncio.run(asyncio.gather(task1(), task2()))
输出顺序可能是:
Copy code
Task 1 start
Task 2 start
Task 2 end
Task 1 end
应用场景
- 网络请求:如处理 HTTP 请求的库 aiohttp。
- 数据库操作:如异步数据库驱动程序 asyncpg。
- 实时系统:如 WebSocket 通信、实时数据流等。
注意事项
- 异步函数不能直接调用,必须在事件循环中运行。
- 异步编程的核心是非阻塞操作,适合大量 I/O 密集型任务,但对 CPU 密集型任务帮助有限。
- 在异步函数中,只有协程和可等待对象才能用await。
通过 async 和 await,Python 的异步编程可以实现高效的并发操作,同时保持代码的可读性。