【问题标题】:Flask + Jinja2: how to measure performancesFlask + Jinja2:如何衡量性能
【发布时间】:2011-11-30 10:15:36
【问题描述】:

我需要比较使用 jinja2.Template.renderjinja2.Template.stream 的 Flask 应用程序的性能,以确保使用模板流不会损失性能。

我的(非常简单的)想法是在模板渲染前后打印时间戳,但是由于网页是由函数返回的,我不太清楚如何实现这个......

我的功能是:

def index():
    """main function"""
    env = Environment(loader=FileSystemLoader(basedir+'templates'))
    #I modify the global variables
    env.globals['foo'] = 'bar'
    env.globals['build_response']=build_response
    get_url = request.args.get('to_print', None)
    message = "the input was \"%s\"" % (get_url,)
    template = env.get_template('body.html')
    return Response(template.stream(message=message))
    #return template.render(message=message)

而我需要衡量的是

return template.render(message=message)

return Response(template.stream(message=message))

谢谢!

【问题讨论】:

    标签: python performance flask jinja2


    【解决方案1】:

    通话前后需要查看系统时钟。

    如果您不立即从 template.render 或 template.stream 返回响应,这样做会更容易。

    IE:

    from time import time
    
    def index():
        # THE REST OF YOUR CODE GOES HERE
        start = time.time()
        resp = template.render(message=message)
        end = time.time()
        processing_time = end - start
        # LOG PROCESSING TIME SOMEPLACE
        return resp
    

    【讨论】:

    • 它不起作用...我的意思是,它是“渲染”的一个很好的解决方案,但对于流它就不行了,因为Response(template.stream(message=message)) 实际上并没有创建包含整个响应的整个响应页面,但一个流处理程序可能需要时间来处理整个页面......
    • 在 chrome 或 safari 或使用 Charles 之类的工具中配置第二个。事实上,他们都在那里。他们会告诉你这个请求花了多长时间才变成坚果。如果唯一的变量是您返回数据的方法,那么差异应该可以量化为您正在寻找的内容
    • 好的...我想您已经确认无法直接在 python 中进行,但我必须从外部进行测量...现在我正在使用 Apache Benchmark。
    • @mattb:是的,您完全可以在@app.before_request@app.teardown_request 中执行此操作,但我认为您需要将其存储在g 对象中。像 before 函数中的g.start_time = time.time() 然后在teardown中计算总请求处理时间并将其写入日志。
    • 我需要将from time import time 更改为import time 以使time.time() 工作....仅供参考
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多