gphoto2 から JPEG を取得し、データから Gio ストリームを作成してから、ストリームから Pixbuf を作成しています。
import gphoto2 as gp
from gi.repository import Gio, GdkPixbuf
camera = gp.Camera()
context = gp.Context
camera.init(context)
file = gp.CameraFile()
camera.capture_preview(file, context)
data = memoryview(file.get_data_and_size())
stream = Gio.MemoryInputStream.new_from_data(data)
pixbuf = GtkPixbuf.Pixbuf.new_from_stream(stream)
# display pixbuf in GtkImage
これを行う関数は、 を使用して Gtk アイドル イベントに関連付けられGLib.idle_add(...)
ます。動作しますが、メモリ リークが発生します。プロセスのメモリ使用量は継続的に上昇します。pixbufを構成する行をコメントアウトしても漏れますが、ストリームを構成する行をコメントアウトしても漏れないので、ストリームそのものが漏れているようです。pixbuf の作成後に追加stream.close()
しても役に立ちません。
ここでメモリを解放する正しい方法は何ですか?