Утечки памяти в PyQt w/ QImage в цикле

Я сейчас работаю над приложением Python, которое использует привязки PyQt5 и CFFI к libgphoto2.

У меня есть этот фрагмент кода, который будет опрашивать камеру каждые 1/60 секунды, чтобы получить изображение для предварительного просмотра, а затем планировать рисовать его на экране.

def showPreview(self):
    # Do we have a camera loaded at the moment?
    if self.camera:
        try:
            # get data from the camera & turn it into a pixmap
            self.__buffer = self.camera.getPreview().scaled(self.size(), Qt.KeepAspectRatio) # Scale it

            # Schedule a redraw
            self.update()

            # Setup another show preview in 1/60 of a second
            QTimer.singleShot(1000 // 60, self.showPreview)
        except GPhoto2Error as e:
            # Ignore any errors from libgphoto2
            pass

getPreview() метод возвращает QImage тип.

Когда я работал с камерой, подключенной к моему приложению, я заметил, что использование памяти моей системой продолжало увеличиваться и увеличиваться. Правильно, у меня было около 10 минут. Это началось при использовании 0,5% и сейчас составляет около 20%.

Поправьте меня, если я ошибаюсь, но не должен ли GC от Python вмешиваться и избавляться от старого QImage объекты. Я подозреваю, что они задерживаются дольше, чем они должны быть.

0 ответов

В случае, если это поможет, у меня была аналогичная утечка памяти в приложении, использующем QImage и QPixmap. Объем памяти увеличивался на 2% каждый раз, когда я загружал изображение. Используя QPixmap.scaled (...., Qt.FastTransformation), я добился увеличения на 0,2% для каждого изображения. Проблема все еще есть, но в 10 раз меньше. Больше в моем коде ничего не изменилось. Значит, он должен быть связан с деструктором QImage/QPixmap.

Другие вопросы по тегам