Streaming de arquivo WSGI com um gerador

Eu tenho o seguinte 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

Não tenho certeza se está certo, mas os fragmentos de informação que encontrei na internet me levaram a pensar que deveria funcionar. Basicamente eu quero transmitir um arquivo em pedaços, e para fazer isso eu estou passando um gerador de volta da minha função de aplicativo. No entanto isso só imprime os cabeçalhos e não envia de volta nenhum dado, alguém pode me dizer por que isso é?

Alternativamente, se isso é completamente errado, qual é a melhor maneira de fazer isso? Eu não posso armazenar todo o arquivo na memória como os arquivos que eu vou trabalhar são potencialmente gigabytes grandes.

Pergunta terciária: Qual é a melhor maneira de fechar o arquivo depois que eu terminar a produção? No código que eu postei eu não posso ver de qualquer maneira para realmente fechar o arquivo.

(Estou executando o python 3.2.3 com o uWSGI 1.2.4)

questionAnswers(1)

yourAnswerToTheQuestion