Утечки памяти в 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.