【一分钟快学】解锁 Python 异步编程的力量:掌握 async/await 语法的正确姿势

Python 中的 async/await 语法是 Python 异步编程的核心,从 Python 3.5 版本开始引入,使得编写异步代码变得更加简单和直观。

基本概念

  • 异步编程:允许程序在等待操作完成时继续执行其他任务的编程范式,非常适合处理 I/O 密集型任务,如网络请求、文件读写等。
  • async 函数 :使用 async def 定义的函数。这种函数被调用时不会立即执行,而是返回一个 awaitable 对象。
  • await 表达式 :用于暂停异步函数的执行,直到等待的 awaitable 对象完成,释放执行权给事件循环。

使用 async/await

定义异步函数

使用 async def 定义一个异步函数,函数内部可以使用 await 来调用其他异步函数或执行异步操作。

python 复制代码
import asyncio

async def fetch_data():
    print("开始获取数据...")
    await asyncio.sleep(2)  # 模拟 I/O 操作
    print("数据获取完成")
    return {'data': 123}

调用异步函数

异步函数需要在事件循环中调用。不能直接像调用普通函数那样调用异步函数。

python 复制代码
async def main():
    data = await fetch_data()
    print(data)

# Python 3.7+
asyncio.run(main())

注意点

  1. 事件循环 :理解异步编程的关键是要明白代码是如何被事件循环处理的。asyncio.run() 函数负责运行主函数,并管理事件循环。
  2. await 的使用 :只能在 async 函数内部使用 await 关键字。
  3. 阻塞操作 :避免在异步函数中使用阻塞调用。如果需要执行阻塞操作,应该使用适当的异步库,或者使用 loop.run_in_executor() 将阻塞调用委托给线程池或进程池。
  4. 并发执行 :使用 asyncio.gather() 可以并发运行多个异步任务。

示例:并发执行异步函数

python 复制代码
async def fetch_data(task_number):
    print(f"任务 {task_number}: 开始获取数据...")
    await asyncio.sleep(2)  # 模拟 I/O 操作
    print(f"任务 {task_number}: 数据获取完成")
    return {f'task_{task_number}': 123}

async def main():
    results = await asyncio.gather(
        fetch_data(1),
        fetch_data(2),
        fetch_data(3),
    )
    for result in results:
        print(result)

asyncio.run(main())

这个示例展示了如何并发执行三个异步任务,并收集它们的结果。asyncio.gather() 是并发运行多个协程的推荐方式,因为它同时启动所有协程,并等待它们全部完成。

async/await 使得异步编程在 Python 中变得非常直观和易于理解。只要记住上述的基本概念和注意点,你就能有效地利用 Python 的异步编程特性了。

相关推荐
接针几秒前
UV 常用命令
python·uv
天国梦7 分钟前
2026英语教学系统选型实战:AI如何让备课效率提升42%?天学网技术落地全解析
人工智能·学习
Conan在掘金25 分钟前
鸿蒙报错速查:struct 里嵌 namespace 声明就炸,根因 + 真解法
后端
hqyjzsb27 分钟前
AI证书和传统证书有什么区别?
人工智能·金融·数据挖掘·数据分析·aigc·创业创新·学习方法
阿里云大数据AI技术27 分钟前
阿里云 Elasticsearch 9.4 Agent Builder 实战
人工智能·elasticsearch·agent
用户77833661321137 分钟前
serpbase + Cloudflare R2 边缘持久化实战
前端·人工智能
东方小月43 分钟前
从零开发一个 Coding Agent(三):EventStream 事件流通道设计与实现
前端·人工智能·后端
卫子miao1 小时前
如何评价当前大语言模型的记忆机制?
后端·架构
中微极客1 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
代码青铜1 小时前
三步给 Codex 接上一个真正的后端:无需写代码,让 AI 自动搭建完整应用
人工智能