Python PyGObject pixbuf утечка памяти
Я извлекаю JPEG из gphoto2, создаю поток 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(...)
, Это работает, но это утечка памяти. Использование памяти процесса постоянно поднимается. Он протекает, даже когда строка, создающая пиксель, закомментирована, но не тогда, когда строка, создающая поток, также закомментирована, поэтому кажется, что это сам поток, который протекает. Добавление stream.close()
после построения pixbuf не помогает.
Какой правильный способ освободить память здесь?
1 ответ
Я бы не назвал это ответом как таковым, и если кто-то знает прямой ответ на вопрос, я с радостью отмечу его как правильный ответ, но для тех, кто находится в той же позиции, есть обходной путь:
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())
loader = GdkPixbuf.PixbufLoader.new()
loader.write(data)
pixbuf = loader.get_pixbuf()
# use the pixbuf
loader.close()
Это больше не утечка памяти.