【问题标题】:In WSGI, send response without returning在 WSGI 中,发送响应而不返回
【发布时间】:2011-11-07 18:41:51
【问题描述】:

有什么方法可以包装一个 WSGI 应用方法,这样服务器会在调用特定方法时发送响应,而不是在应用方法返回序列时发送响应?

基本上,我想要一个等效于finish_response(responseValue) 的方法。

【问题讨论】:

    标签: python wsgi


    【解决方案1】:

    WSGI 应用程序必须以一种或另一种方式返回一个可迭代对象。如果您想发送部分响应,请将您的应用程序变成一个生成器(或返回一个迭代器):

    import wsgiref, wsgiref.simple_server, time
    
    def app(environ, start):
        start('200 OK', [('Content-Type', 'text/plain')])
    
        yield 'hello '
        time.sleep(10)
        yield 'world'
    
    httpd = wsgiref.simple_server.make_server('localhost', 8999, app)
    httpd.serve_forever()
    

    【讨论】:

    • 具体来说,这是有效的,因为 WSGI 规范规定,底层 WSGI 服务器必须在获取下一个数据块之前,对从可迭代/生成器返回的每个数据块执行刷新。不过,WSGI 中间件显然可能会以各种方式干扰这一点。
    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 2021-12-02
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多