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

相关推荐
程序员清风8 分钟前
阿里二面:Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 有什么影响?
java·后端·面试
幼稚园的山代王8 分钟前
Prompt Enginering(提示工程)先进技术
java·人工智能·ai·chatgpt·langchain·prompt
dfsj660119 分钟前
LLMs 系列科普文(14)
人工智能·深度学习·算法
摘取一颗天上星️15 分钟前
深入解析机器学习的心脏:损失函数及其背后的奥秘
人工智能·深度学习·机器学习·损失函数·梯度下降
远方160922 分钟前
20-Oracle 23 ai free Database Sharding-特性验证
数据库·人工智能·oracle
znhy605824 分钟前
智能终端与边缘计算按章复习
人工智能·边缘计算
CodeSheep28 分钟前
宇树科技,改名了!
前端·后端·程序员
__Benco30 分钟前
OpenHarmony平台驱动使用(十五),SPI
人工智能·驱动开发·harmonyos
Listennnn31 分钟前
AI系统的构建
人工智能·系统架构
新智元34 分钟前
全球 30 名顶尖数学家秘密集会围剿 AI,当场破防!惊呼已接近数学天才
人工智能·openai