クライアントにファイルを返すための次の Werkzeug アプリケーションがあります。
from werkzeug.wrappers import Request, Response
@Request.application
def application(request):
fileObj = file(r'C:\test.pdf','rb')
response = Response( response=fileObj.read() )
response.headers['content-type'] = 'application/pdf'
return response
私が注目したいのは、次の部分です。
response = Response( response=fileObj.read() )
この場合、応答には約 500 ミリ秒かかります (C:\test.pdf
は 4 MB のファイルです。Web サーバーはローカル マシンにあります)。
しかし、その行を次のように書き直すと:
response = Response()
response.response = fileObj
現在、応答には約 1500 ミリ秒かかります。(3 倍遅い)
そして、次のように書くと:
response = Response()
response.response = fileObj.read()
現在、応答には約 80 秒かかります (そうです、80 秒です)。
3つの方法にそれほど大きな違いがあるのはなぜですか?
そして、なぜ3番目の方法はとても遅いのですか?