《Python 3.6.5参考手册(CHM)》是一份全面详尽的电子文档,为开发者提供Python语言的关键特性、语法结构和标准库详解,便于离线查阅与学习。
Python的`asyncio`库提供了用于编写并发代码的功能,特别是异步I/O操作。该模块是为使用协程进行事件循环编程而设计的。
### 1. asyncio基础
#### 创建事件循环
```python
import asyncio
loop = asyncio.get_event_loop()
```
这行代码获取当前线程中的默认事件循环,如果不存在则创建一个新的。
#### 运行异步任务
可以使用以下方法来运行协程:
- `asyncio.run()`: 用于执行顶级的入口点。
- `event_loop.create_task()`: 创建一个未启动的任务并立即返回它。
- `event_loop.run_until_complete()`或`await`关键字:等待直到给定的未来完成。
#### 定时器
```python
import asyncio
async def delay():
await asyncio.sleep(1)
# 使用定时器
loop.call_later(delay(), callback, *args)
```
### 2. 协程与任务
协程是通过`await`关键字定义的异步函数。它们可以在事件循环中调度执行。
```python
import asyncio
async def my_coroutine():
await delay()
print(Coroutine finished)
task = loop.create_task(my_coroutine())
```
### 3. 等待多个任务完成
可以使用`gather()`或`as_completed()`来等待一组协程的结果:
- `gather()`: 返回所有给定协程的集合。
- `as_completed()`: 迭代器,返回已完成的所有未来。
```python
import asyncio
async def main():
task1 = asyncio.create_task(delay())
task2 = asyncio.create_task(delay())
await asyncio.gather(task1, task2)
loop.run_until_complete(main())
```
### 4. 使用`StreamReader`和`StreamWriter`
这些类用于处理I/O操作,例如连接到服务器、读取和写入数据。
```python
import asyncio
async def tcp_echo_client():
reader, writer = await asyncio.open_connection(127.0.0.1, 8888)
message = Hello World!
writer.write(message.encode())
data = await reader.read(100)
print(data.decode())
loop.run_until_complete(tcp_echo_client())
```
### 5. asyncio与第三方库
`asyncio`能够很好地与其他异步框架和库一起工作,如aiohttp(用于HTTP客户端)。
```python
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
loop = asyncio.get_event_loop()
with aiohttp.ClientSession(loop=loop) as session:
html = loop.run_until_complete(fetch(session, https://example.com))
```
### 6. 使用协程进行并发编程
通过`asyncio`,你可以编写高效的异步应用,实现非阻塞的I/O操作。这使得Python程序能够更好地利用多核处理器和网络资源。
以上是关于使用Python `asyncio`库的基本介绍,包括如何创建事件循环、运行任务以及处理多个协程等核心概念。