私はpyexiv2ライブラリを使用して画像のexif情報を読み取ります。画像が完全でない場合、ImageMetadata.from_buffer()メソッドがメモリリークを引き起こすことがわかりました。しかし、ImageMetadata() メソッドは問題ありません。
以下のコードは私のテストコードです。画像ではないファイルから読み取らせると、メモリが解放されていないことがわかります。
import pyexiv2
import time
import sys
import os
def read_metadata(file_data):
try:
metadata = pyexiv2.ImageMetadata(file_data)
metadata = pyexiv2.ImageMetadata.from_buffer(file_data)
metadata.read()
except Exception,e:
print e
filename = sys.argv[1]
print filename
write_metadata(open(filename).read())
time.sleep(10000)