Python基础入门 Day48:aiohttp 异步 HTTP 请求实战

108次阅读
没有评论

共计 1117 个字符,预计需要花费 3 分钟才能阅读完成。

在上一节我们学习了 asyncio 的基础用法,今天我们将继续探索异步编程领域的强大工具 —— aiohttp,这是一个基于 asyncio 的异步 HTTP 客户端与服务端库,适合高并发爬虫、API 调用等场景。

一、为什么使用 aiohttp
标准库中的 requests 是同步的,在高并发场景下性能瓶颈明显。而 aiohttp 利用协程进行 I/O 操作,可并发处理大量请求,适合网络密集型任务。

二、aiohttp 安装与基础用法
首先使用 pip 安装:

pip install aiohttp

基本示例:

import aiohttp
import asyncio

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            text = await response.text()
            print(f"{url} 内容长度:{len(text)}")

async def main():
    urls = [
        "https://example.com",
        "https://httpbin.org/get",
        "https://api.github.com"
    ]
    tasks = [fetch(url) for url in urls]
    await asyncio.gather(*tasks)

asyncio.run(main())

三、核心概念解析

  1. ClientSession:会话对象,建议复用以提升性能。
  2. session.get():发起异步 GET 请求。
  3. await response.text():读取响应文本内容。

四、处理 JSON 数据
在处理 API 接口时,通常返回 JSON,可直接调用:

data = await response.json()
print(data["key"])

五、异常处理建议
网络请求不总是可靠的,因此建议加上异常处理:

try:
    async with session.get(url, timeout=10) as response:
        return await response.json()
except aiohttp.ClientError as e:
    print(f" 请求出错:{e}")

六、实战建议与应用场景

  • 编写异步爬虫采集多个网页内容
  • 批量调用 RESTful API 接口,提高数据处理效率
  • 实现健康检查脚本并发检查多个服务状态

七、注意事项

  • aiohttp 不适合文件上传下载(推荐使用 aiofiles 等配套库)
  • 使用时注意事件循环只能有一个 asyncio.run(),避免嵌套运行

aiohttp 是现代 Python 异步网络编程的核心工具之一。明天我们将介绍如何构建一个 aiohttp 异步 Web 服务器,实现基本的 REST 接口。

正文完
 0
评论(没有评论)