2017-06-02 7 views
3

私は単純なFlaskアプリケーションを書いて、そのメモリ使用量をテストします。Flaskで大きなテキストファイルを読み込むのがメモリを占有しないのはなぜですか?

ここにコードがあります。

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
     with open("file.txt", "r") as fd: 
       text = fd.read() 
     return "Hello World!" 

if __name__ == "__main__": 
     app.run(host="0.0.0.0") 

file.txtは、このコマンドで作成され、そのサイズは50MBです。

base64 /dev/urandom | head -c 50000000 > file.txt 

次のコマンドで実行して:

python3 test.app 

file.txtを読まずに実行している場合は、メモリ使用量が18448キロバイトです。

file.txtを実行している場合、メモリ使用量は18988KBです。

このファイルは50MBですが、メモリ使用量は540KBしか増加しません。私はPythonの仕組みを理解していません。

答えて

2

メモリがビューの終了後にガベージコレクションされるためです。ビューが実行されている短い時間の間、実際には50MBの追加メモリが使用されます。

これはFlaskとは関係がありません。このようなファイルを読み込んだ通常のPython関数でも同じことが起こります。

+0

また、フラスコの表示が要求されたときにのみファイルが読み込まれることを指摘します。それはかなり簡単ですが、OPはPython呼び出しのみを記述しているので、ビューに照会することさえできないかもしれません。 –

+0

@ImanolLuengoメモリが少し増えたため(PythonはGC中にすぐに割り当てられたすべてのメモリを解放しないので)、私はそれらがそれを暗示していると仮定しました。 – davidism

関連する問題