【问题标题】:python aiohttp middleware func definition; why the difference, and what's bestpython aiohttp中间件func定义;为什么有区别,什么是最好的
【发布时间】:2019-07-31 14:18:51
【问题描述】:

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' 通过魔法出现在内部函数中......

只是想了解发生了什么。

【问题讨论】:

    标签: python middleware aiohttp


    【解决方案1】:

    它们几乎相等。

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

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多