Strumieniowanie plików WSGI za pomocą generatora
Mam następujący kod:
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
Nie jestem pewien, czy to prawda, ale skrawki informacji, które znalazłem w Internecie, doprowadziły mnie do wniosku, że powinno to zadziałać. Zasadniczo chcę przesyłać strumieniowo plik w kawałkach i w tym celu przekazuję generator z funkcji aplikacji. Jednak drukuje tylko nagłówki i nie wysyła żadnych danych, czy ktoś może mi powiedzieć, dlaczego tak jest?
Alternatywnie, jeśli jest to całkowicie błędne, jaki jest najlepszy sposób, aby to zrobić? Nie mogę buforować całego pliku w pamięci, ponieważ pliki, z którymi będę pracować, są potencjalnie duże w gigabajtach.
Pytanie trzeciorzędne: Jaki jest najlepszy sposób na zamknięcie pliku po zakończeniu generowania go? W napisanym przeze mnie kodzie nie widzę, aby rzeczywiście zamknąć plik.
(Używam pythona 3.2.3 z uWSGI 1.2.4)