【问题标题】:Howto pythonic way to integrate pynba and Flask?如何以 Python 方式集成 pynba 和 Flask?
【发布时间】:2023-04-03 05:37:01
【问题描述】:

之后 点安装烧瓶 点安装pynba

我试试下面的代码

进口烧瓶 导入pynba.wsgi FlaskWithPynba 类(flask.Flask): @pynba.wsgi.monitor(('localhost', 30002)) def wsgi_app(self, environ, start_response): super(FlaskWithPynba, self).wsgi_app(environ, start_response) app = FlaskWithPynba('myapp')

但是在调用 app.run() 时会出现一些错误

回溯(最近一次通话最后): 文件“/home/coffee/venv/local/lib/python2.7/site-packages/flask/app.py”, 第 1836 行,在 __call__ 中 return self.wsgi_app(environ, start_response) 文件“pynba/wsgi/middleware.pyx”,第 63 行, 在 pynba.wsgi.middleware.PynbaMiddleware.__call__ (pynba/wsgi/middleware.c:1554) 文件“pynba/wsgi/middleware.pyx”,第 64 行, 在 pynba.wsgi.middleware.PynbaMiddleware.__call__ (pynba/wsgi/middleware.c:1510) TypeError: wsgi_app() 正好需要 3 个参数(给定 2 个)

【问题讨论】:

    标签: python flask decorator wsgi


    【解决方案1】:

    看起来 pynba 装饰器只设计用于普通函数而不是类的方法。

    您需要执行以下操作:

    myapp = Flask()
    
    @pynba.wsgi.monitor(('localhost', 30002))
    def app(environ, start_response):
        return myapp(environ, start_response)
    

    编写一个可以在类的函数和方法上工作的单个装饰器实现并非易事。他们或许应该看看 wrapt 装饰器库并使用它来正确地完成它。

    FWIW。如果他们的中间件包装是:

    那么它也不能正常工作。当一个 WSGI 应用程序是一个生成器时,所需要的时间就是 Python 创建生成器对象所花费的时间。它不会计算 WSGI 应用程序代码运行多长时间。即使在 WSGI 应用程序的普通函数上,也不会计算 WSGI 服务器发送响应然后随后调用任何返回的迭代的 close() 所花费的时间。因此,它不能准确表示整个 WSGI 应用程序花费了多长时间。

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多