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

相关推荐
一次旅行5 小时前
HyperTool:突破传统工具调用限制,让Agent更高效执行复杂任务
人工智能
陈天伟教授6 小时前
图解人工智能(58)人工智能应用-围棋国手
人工智能·语音识别·机器翻译
JustHappy6 小时前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
闻道参看6 小时前
2026年AI优质企业培训系统综合测评:合规管控/数据量化
人工智能
老毛肚6 小时前
jeecg-boot-base-core 02 day
javascript·python
yaoxin5211236 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
老虾头6 小时前
科技贴近烟火:本地化 AI,赋能各行各业日常经营
人工智能
Hommy886 小时前
【剪映小助手】添加图片接口(Add Images)
后端·github·剪映小助手·视频剪辑自动化
毒爪的小新6 小时前
Linux 环境极速部署 vLLM:从零搭建生产级大模型推理服务
linux·人工智能·ai·语言模型·vllm
老大白菜6 小时前
25美元,DIY开源可穿戴智能AI眼镜:Arduino+乐鑫ESP32+DeepSeek项目
人工智能