大型fastapi项目实战 高并发请求神器之aiohttp(上) [建议收藏]
aiohttp介绍及安装
1.背景介绍
在 Python 众多的 HTTP 客户端中,最有名的莫过于 requests、aiohttp 和 httpx。在不借助其他第三方库的情况下,requests 只能发送同步请求;aiohttp 只能发送异步请求;httpx 既能发送同步请求,又能发送异步请求。在并发量大的情况下,如何高效的处理数据,异步是我们的优选,今天我们主要详解的是在生产环境广泛使用的 aiohttp。
2.aiohttp 是什么
aiohttp 是一个为 Python 提供异步HTTP 客户端/服务端编程,基于 asyncio(Python用于支持异步编程的标准库)的异步库。
3.aiohttp 核心功能同时支持客户端使用和服务端使用。
同时支持服务端 WebSockets 组件和客户端 WebSockets 组件,开箱即用。
web 服务器具有中间件,信号组件和可插拔路由的功能。
以下的案例都是基于客户端展开,我们在生产中主要是用 aiohttp 来做客户端用。
4.aiohttp 库安装$ pip install aiohttp
对于更快的客户端 API DNS 解析方案,aiodns 是个很好的选择,极力推荐,$ pip install aiodns
aoihttp 业务核心功能
1. 发起 get 请求
# -*- encoding: utf-8 -*-
import asyncio
import aiohttp
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://www.baidu.com') as resp:
print(resp.status)
res = await resp.text()
print(res[:100])
if __name__ == '__main__':
# 注意:
# python3.7+ 支持写法
# asyncio.run(main())
# python3.6及以下版本写法
event_loop = asyncio.get_event_loop()
result = event_loop.run_until_complete(asyncio.gather(main()))
event_loop.close()
2. 发起 post 请求
# -*- encoding: utf-8 -*-
import asyncio
import aiohttp
async def post_v1():
data = b'\x00Binary-data\x00' # 未经编码的数据通过bytes数据上传
data = 'text' # 传递文本数据
data = {'key': 'value'} # 传递form表单
async with aiohttp.ClientSession() as sess:
async with ses