Python
- 基础
-
库
- 其他
- 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
**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 操作并发执行的场景,比如网络请求、爬虫等。**