2016-06-14 8 views
2

.yml fileをPyYAMLライブラリにロードするときにメモリリークが発生していると思います。PyYAMLでメモリリーク

Iは、次のステップに従ってきた:

import yaml 
d = yaml.load(open(filename, 'r')) 

プロセスによって使用されるメモリは、ファイルのサイズが低いながら160M60Kから成長した(私はtop又はhtopでそれを得ている)

1Mより。

その後、私は次のコマンドやった:

sys.getsizeof(d) 

をそして、それは400Kよりも低い値を返しました。

私もgc.collect()でガベージコレクタを使用しようとしましたが、何も起こっていません。

ご覧のとおり、メモリリークが発生しているようですが、何が何を生産しているのかわかりませんし、この量のメモリを解放する方法もわかりません。

答えて

0

あなたのアプローチではメモリリークは見られません。PyYAMLが適度なサイズのYAMLファイルを処理しているときに大量のメモリを使用していることを示しているだけです。

あなたが希望の場合:

import yaml 
X = 10 
for x in range(X): 
    d = yaml.load(open(filename, 'r')) 

、プログラムによって使用されるメモリサイズは、あなたがXを設定するものに応じて変化するであろう、そして、メモリリークがあると想定する理由があります。

私が実行したテストではそうではありません。デフォルトのLoaderとSafeLoaderはメモリ内のファイルサイズ(単純な任意の1Mbサイズ(つまりタグなし、YAMLファイル)に基づく)の約330倍、CLoaderはファイルサイズの約145倍です。

YAMLデータを複数回読み込んでもそれが増えないため、load()は使用するメモリを返します。つまり、メモリリークはありません。

これは、膨大なオーバーヘッドのように見えるわけではありません。