【一分钟快学】解锁 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 的异步编程特性了。

相关推荐
Brookty几秒前
【JavaEE】线程安全-内存可见性、指令全排序
java·开发语言·后端·java-ee·线程安全·内存可见性·指令重排序
霍格沃兹软件测试开发13 分钟前
快速掌握Dify+Chrome MCP:打造网页操控AI助手
人工智能·chrome·dify·mcp
百锦再14 分钟前
[特殊字符] Python在CentOS系统执行深度指南
开发语言·python·plotly·django·centos·virtualenv·pygame
风象南17 分钟前
SpringBoot Jar包冲突在线检测
后端
程序员爱钓鱼19 分钟前
Go语言实战案例 — 项目实战篇:任务待办清单 Web 应用
后端·google·go
张子夜 iiii23 分钟前
4步OpenCV-----扫秒身份证号
人工智能·python·opencv·计算机视觉
潮汐退涨月冷风霜1 小时前
数字图像处理(1)OpenCV C++ & Opencv Python显示图像和视频
c++·python·opencv
华新嘉华DTC创新营销2 小时前
华新嘉华:AI搜索优化重塑本地生活行业:智能推荐正取代“关键词匹配”
人工智能·百度·生活
Cyan_RA92 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
SmartBrain3 小时前
DeerFlow 实践:华为IPD流程的评审智能体设计
人工智能·语言模型·架构