Transmisión de archivos WSGI con un generador

Tengo el siguiente código:

def application(env, start_response):
    path = process(env)
    fh = open(path,'r')
    start_response('200 OK', [('Content-Type','application/octet-stream')])
    return fbuffer(fh,10000)


def fbuffer(f, chunk_size):
    '''Generator to buffer file chunks'''  
    while True:
        chunk = f.read(chunk_size)      
        if not chunk: break
        yield chunk

No estoy seguro de que sea correcto, pero los restos de información que he encontrado en Internet me han llevado a pensar que debería funcionar. Básicamente, quiero transmitir un archivo en trozos, y para hacer eso, estoy pasando un generador desde mi función de aplicación. Sin embargo, esto solo imprime los encabezados y en realidad no envía ningún dato, ¿alguien puede decirme por qué esto es así?

Alternativamente, si esto es completamente incorrecto, ¿cuál es la mejor manera de hacerlo? No puedo almacenar en memoria el archivo completo en la memoria ya que los archivos con los que trabajaré son potencialmente gigabytes de gran tamaño.

Pregunta terciaria: ¿Cuál es la mejor manera de cerrar el archivo una vez que termine de publicarlo? En el código que publiqué no puedo ver de todos modos para cerrar el archivo.

(Estoy ejecutando python 3.2.3 con uWSGI 1.2.4)

Respuestas a la pregunta(1)

Su respuesta a la pregunta