Проблемы с производительностью загрузки изображений с помощью python и gobject

У меня есть сценарий с интерфейсом GTK (GObject) Я использую для публикации в моем фотоблоге.

Я пытаюсь улучшить его отзывчивость, загружая изображения в фоновом потоке.

Мне не удалось заполнить объекты GdkPixbuf из фонового потока, все, что я пробовал просто сплошные пробки.

Так что в качестве альтернативы Я думал, что прочитал файлы в фоновом потоке, а затем по требованию отправил их в GdkPixbuf. Такой подход дал некоторые удивительные и довольно удручающие результаты производительности, которые заставляют меня задуматься, не делаю ли я что-то в высшей степени неправильно.

Я играю со слегка сжатыми файлами JPEG со своей камеры, они обычно составляют около 3,8 МБ.

Вот исходная загрузка блокирующего изображения:

pb = GdkPixbuf.Pixbuf.new_from_file(image_file)

В среднем это около 550 мс, не очень много, но довольно утомительно, если вы хотите пролистать дюжину изображений.

Затем я разделил его, вот файл:

data = bytearray(open(self.image_file).read())

Это среднее значение 15 мс, это действительно хорошо, но также вызывает беспокойство, если мы сможем прочитать файл за 15 мс, на что будут потрачены остальные 535 мс?

Между прочим, существует вызов bytearray, потому что PixBufLoader иначе не принял бы данные.

И затем загрузка Pixbuf:

pbl = GdkPixbuf.PixbufLoader()
pbl.write(data, len(data))
pbl.close()
pb = pbl.get_pixbuf()

В среднем это около 1400 мс, что почти в 3 раза дольше, чем позволить Gtk делать все это.

Я здесь что-то делаю не так?

7
задан Daenyth 16 June 2011 в 15:04
поделиться