代码之家  ›  专栏  ›  技术社区  ›  Ian Baget

Python Mod_WSGI输出缓冲区

  •  0
  • Ian Baget  · 技术社区  · 17 年前

    这是一个有点棘手的问题;

    我正在python中使用mod_wsgi,并希望创建一个持续生成HTML的输出缓冲区(直到页面加载完成)。

    (mod_wsgi没有内置的输出缓冲区来处理这一点有点糟糕,我讨厌加载整个页面,然后只发送一次输出,这会导致页面加载慢得多)。

    2 回复  |  直到 17 年前
        1
  •  2
  •   NerdyNick    17 年前

    (mod_wsgi没有内置的输出缓冲区来处理这一点有点糟糕,我讨厌加载整个页面,然后只发送一次输出,这会导致页面加载慢得多)。

    除非您正在执行某种流式或异步应用程序,否则您希望在99.9%的时间里一次性发送整个页面。我能想到的唯一例外是,如果你发送一个 网页(我指的是数百兆字节)。

    我提到这一点的原因是要指出,如果你有性能问题,很可能不是因为你在缓冲输出。处理这个问题的最简单方法是这样做:

    def Application(environ, start_response):
        start_response('200 Ok', [('Content-type','text/plain')])
        response = []
        response.append('<h1>')
        response.append('hello, world!')
        response.append('</h1>')
        return [''.join(response)] #returns ['<h1>hello, world!</h1>']
    

    你最好的选择是使用一个可变的数据结构,如列表,来保存消息的块,然后像我上面做的那样将它们连接成一个字符串。除非你有某种特殊需要,否则这可能是最好的通用方法。

        2
  •  2
  •   Jason Baker    17 年前

    mod_wsgi应该内置对生成器的支持。因此,如果你使用像CherryPy这样的框架,你只需要做:

    def index():
        yield "Some output"
        #Do Somemore work
        yield "Some more output"
    

    每个yield都会向用户返回页面的一大块。

    以下是CherrPy关于实现及其工作原理的一些基础知识 http://www.cherrypy.org/wiki/ReturnVsYield

    推荐文章