溪客(编程代码) 溪客(编程代码)

  • 今天是2025年08月20日 Wednesday
  • 首页
  • 知识
  • 网址
  • AI助手

Python

首页 / 知识 / Python
  • 基础
    • Conda
    • Jupyter
    • dump
    • CSharp2Python
    • 关于模块导入
    • 关于推导式
    • 关于元组
    • set和数组的区别
    • 关于Literal
    • 关于iter
    • 关于setup.py
    • 路径拼接
    • 方法命名约定
  • 库
    • 其他
    • argparse命令行参数解析
    • asyncio自带异步编程库
    • aiofiles异步文件读写库
    • beautifulsoup4_HTML_XML解析库
    • colorama_在终端输出漂亮的字
    • datasets数据集处理
    • html2text
    • httpx_HTTP请求库
    • litellm
    • loguru日志库
    • numpy科学计算基础库
    • pillow图像处理
    • pydantic数据验证
    • pyyaml
    • requests_HTTP请求库
    • tenacity重试
    • tiktoken计算Token量
    • torch机器学习_深度学习框架
    • tomli TOML文件解析库
    • tomllib 自带TOML文件解析库
    • unidiff_文本_文件差异对比
    • uvicorn_Web服务器
  • langchain
    • langchain-chatchat
    • langchain-qianfan
**asyncio 是 Python 标准库中的一个模块,用于编写** **异步 I/O(非阻塞)程序**,让你可以用协程(coroutine)的方式高效地处理并发任务,比如网络请求、文件读写、数据库操作等。 --- ## 一、asyncio 是什么?(简单理解) - **asyncio 是 Python 原生支持的异步编程工具**,让你能够以**非阻塞的方式同时处理多个任务**,提高程序的运行效率,特别是在 I/O 密集型场景(如网络通信)中。 - 它的核心概念包括: - **协程(coroutine)**:使用 `async def` 定义的函数,可以被挂起和恢复,不会阻塞整个程序。 - **事件循环(event loop)**:负责调度和运行协程,管理异步任务的执行。 - **async/await**:用于定义和调用异步函数的关键字。 --- ## 二、asyncio 解决什么问题? 在传统的同步编程中,如果一个任务需要等待(比如网络请求、文件读取),**整个程序会被阻塞,直到该任务完成**,这样效率很低,尤其是需要处理大量 I/O 操作时。 **asyncio 的作用就是:** > 让程序在等待 I/O(比如请求网页、读写文件)时**不阻塞**,可以去处理其他任务,等 I/O 完成后再回来继续,从而**提升程序的并发能力和运行效率**。 --- ## 三、asyncio 基本使用示例 ### 示例:一个简单的异步函数 ```python import asyncio # 定义一个协程函数 async def say_hello(): print("Hello") await asyncio.sleep(1) # 模拟一个耗时的异步操作,比如网络请求 print("World") # 运行协程 asyncio.run(say_hello()) ``` 输出(1 秒后): ``` Hello World ``` ### 示例:同时运行多个协程(并发) ```python import asyncio async def task(name, delay): print(f"{name} 开始") await asyncio.sleep(delay) print(f"{name} 结束") async def main(): await asyncio.gather( task("任务1", 2), task("任务2", 1), task("任务3", 3) ) asyncio.run(main()) ``` 输出大致为: ``` 任务1 开始 任务2 开始 任务3 开始 任务2 结束 (1秒后) 任务1 结束 (2秒后) 任务3 结束 (3秒后) ``` > 虽然三个任务分别等待 2、1、3 秒,但它们是**并发执行**的,总时间大约是 3 秒,而不是 2+1+3=6 秒。 --- ## 四、asyncio 常见用途 | 场景 | 说明 | |------|------| | **网络请求** | 比如使用 `aiohttp`、`httpx` 发送异步 HTTP 请求 | | **爬虫** | 异步抓取多个网页,提高效率 | | **WebSocket 通信** | 实时双向通信 | | **数据库异步访问** | 如使用 `asyncpg`、`databases` 等异步驱动 | | **高并发服务** | 比如使用 FastAPI、Starlette 等异步 Web 框架 | | **后台任务 / 定时任务** | 利用协程做轻量级并发任务调度 | --- ## 五、asyncio 核心概念总结 | 概念 | 说明 | |------|------| | **async def** | 定义一个协程函数 | | **await** | 用来等待一个协程或异步操作完成 | | **asyncio.run()** | 运行一个协程(Python 3.7+ 推荐方式) | | **事件循环(Event Loop)** | 异步程序的核心,负责调度协程的执行 | | **协程(Coroutine)** | 可暂停和恢复的函数,用于实现异步逻辑 | | **asyncio.gather()** | 并发运行多个协程 | | **asyncio.create_task()** | 创建一个任务,用于后台运行协程 | --- ## 六、总结(中文) > **asyncio 是 Python 提供的原生异步编程库,通过协程、事件循环和 async/await 语法,让你可以高效地处理并发 I/O 操作,特别适用于网络请求、爬虫、高并发服务等场景,是现代 Python 异步开发的重要基础。** --- ✅ **简单来说:** > **asyncio 是 Python 自带的异步编程工具,让你可以用 async/await 写出非阻塞的高效代码,特别适合处理多个 I/O 操作并发执行的场景,比如网络请求、爬虫等。**
© 2022 - 溪客(编程代码) - 粤ICP备10217501号 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)