一、介绍
最近接到一个需求,日常业务升级后需要手动检查各业务线的运行状态,这样非常耗时,因此决定写一个自动巡检的脚本,需要同时处理n个任务,并将结果通过websocket同步给前端展示,经过调研,决定使用aiohttp来处理。aiohttp是一个基于asyncio库的异步HTTP客户端/服务器框架,用于构建高性能的Web应用。它支持HTTP 1.1和WebSockets,并且拥有中间件支持、插件系统以及会话等特性。
二、安装
首先,你需要安装aiohttp。你可以使用pip来安装:
pip install aiohttp
三、基本使用
1. 客户端使用
aiohttp的客户端是异步的,这意味着你可以使用await关键字来等待HTTP请求的结果。
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html)
# Python 3.7+
asyncio.run(main())
在上面的代码中,我们首先创建了一个ClientSession,然后使用它来获取一个URL的内容。注意session.get(url)是一个异步上下文管理器,这意味着你可以使用async with语句来自动关闭会话。
2. 服务器使用
aiohttp也可以用来创建Web服务器。以下是一个简单的例子:
from aiohttp import web
async def hello(request):
return web.Response(text="Hello, world")
app = web.Application()
app.add_routes([web.get('/', hello)])
web.run_app(app)
在这个例子中,我们创建了一个Web应用,然后添加了一个路由,该路由在访问根URL时返回"Hello, world"。最后,我们使用web.run_app(app)来运行应用。
四、高级特性
1. 中间件
aiohttp支持中间件,这是一种在请求处理过程中插入自定义逻辑的方式。例如,你可能想记录每个请求的处理时间,或者检查请求的身份验证。
from aiohttp import web
from aiohttp.web_middlewares import middleware
@middleware
async def middleware_handler(request, handler):
# 自定义逻辑
print("Before handler")
response = await handler(request)
print("After handler")
return response
app = web.Application(middlewares=[middleware_handler])
2. 插件
aiohttp支持插件系统,这使得你可以在不修改核心代码的情况下扩展其功能。例如,aiohttp_jinja2是一个允许你在aiohttp应用中使用Jinja2模板的插件。
from aiohttp import web
from aiohttp_jinja2 import setup, render_template
import jinja2
async def init_app(app):
setup(app, loader=jinja2.FileSystemLoader('templates'))
async def index(request):
return render_template('index.html', request, {'message': 'Hello, world!'})
app = web.Application()
app.on_startup.append(init_app)
app.router.add_get('/', index)
web.run_app(app)
3. 会话
aiohttp的客户端支持会话,这允许你在多个请求之间共享cookie和连接。这对于需要登录或保持状态的Web应用非常有用。
4.使用webSocket
五、总结
aiohttp是一个功能强大的异步HTTP客户端/服务器框架,它允许你构建高性能的Web应用。通过使用异步IO和中间件,你可以创建出既高效又灵活的Web服务。
领取专属 10元无门槛券
私享最新 技术干货