Python aiohttp中间件函数定义的差异是什么,哪种方法最好?

3

Context 正在创建一个简单的 Python 代理程序,用于汇总各种不同的指标,以供 Prometheus 进行抓取。我正在使用中间件来更新这些值。我发现有两种定义 aiohttp 中间件的方法,它们都可以工作。我想更好地了解它们之间的区别,并且您会推荐哪一种(或者可能还有其他我尚未发现的方法!)

async def mw1(app, handler):
    async def middleware_handler(request):
        print('mw1 start')
        response = await handler(request)
        print('mw1 end')
        return response
    return middleware_handler

@web.middleware 
async def mw2(request, handler):
    print('mw2 start')
    response = await handler(request)
    print('mw2 end')
    return response

app = web.Application(middlewares=[mw1, mw2])

这两者都被调用并且按预期工作。但是我不太理解为什么一个使用'app'作为参数,另一个使用'request'的重要性。

在mw2()中,如果需要,可以通过request.app访问到'app'。在mw1()中,'request'似乎像魔术一样出现在内部函数中...

只是想理解发生了什么。

1个回答

2

它们几乎相等。

第二种形式的运行速度更快(我忘记确切的数字,大约是30%左右),因此第一种形式已经被弃用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接