我有以下代碼: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與1.2.4 uWSGI)
http://www.python.org/dev/peps/pep-0333/#id36 – SingleNegationElimination 2012-08-04 19:49:02
或者更直接的鏈接。 http://www.python.org/dev/peps/pep-0333/#optional-platform-specific-file-handling – 2012-08-05 04:31:07