异步编程是现代 Python 开发者的必备技能。本文从基础概念讲起,带你掌握 asyncio。
## 什么是异步编程?
传统同步编程中,遇到 I/O 操作时程序会阻塞等待。而异步编程允许在等待 I/O 的同时执行其他任务。
## 核心概念
### 协程 (Coroutine)
用 `async def` 定义的函数返回一个协程对象,需要用 `await` 来执行。
“`python
async def fetch_data(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.json()
“`
### 事件循环 (Event Loop)
事件循环是异步编程的核心调度器,负责管理和调度所有协程。
### 任务 (Task)
使用 `asyncio.create_task()` 可以将协程包装成任务,实现并发执行。
## 实战:并发下载
“`python
import asyncio
import aiohttp
async def download_all(urls):
async with aiohttp.ClientSession() as session:
tasks = [download_one(session, url) for url in urls]
return await asyncio.gather(*tasks)
“`
## 注意事项
– 不要在异步函数中调用阻塞的同步代码
– 使用 `asyncio.run()` 作为入口
– 注意异常处理,避免任务静默失败
异步编程的学习曲线虽然陡峭,但掌握后能大幅提升程序的性能和并发能力。