Потоковая передача файлов WSGI с генератором
У меня есть следующий код:
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
Я не уверен, что это правильно, но клочки информации, которую я нашел в интернете, заставили меня думать, что это должно сработать. По сути, я хочу передать файл частями и сделать это, передавая генератор обратно из функции приложения. Однако это только распечатывает заголовки и фактически не отправляет обратно какие-либо данные, может кто-нибудь сказать мне, почему это так?
В качестве альтернативы, если это полностью неправильно, каков наилучший способ сделать это? Я не могу буферизовать весь файл в памяти, поскольку файлы, с которыми я буду работать, потенциально имеют размер в гигабайты.
Третичный вопрос: каков наилучший способ закрыть файл, как только я закончу его выводить? В коде, который я разместил, я все равно не вижу, как на самом деле закрыть файл.
(Я использую Python 3.2.3 с uWSGI 1.2.4)