Модераторы: pythonwin, Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> утечка памяти в PySide 
:(
    Опции темы
spirits25
Дата 22.2.2012, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.2.2012

Репутация: нет
Всего: нет



Доброе Всем время суток!

Есть Layout, на котором постоянно удаляется один виджет и создаётся заново с новыми параметрами. Всего на слое 2 виджета
Удаляю разными способами
Код

            self.widget2.close()
            
            self.layout.removeItem(self.layout.itemAt(1))
            try:
                self.widget2.destroy()
                self.widget2.deleteLater()
                self.widget2 = None
                del (self.widget2)
            except:
                print 'Delete Error!'

Добавляю новый виджет
Код

self.widget2 = MyWidget(self, name)
self.layout.addWidget(self.widget2)

В классе MyWidget строится большой виджет (много разных элементов в слое)
В ходе примерно 50 выполнений занятая память плавно возрастает с
%MEM  1.8
до
%MEM  2.2 
А памяти 4 Гига. Причём дальшейшее выполнение этого кода к такой утечке уже не приводит. Но если то же делать с другим виджетом (тоже класс MyWidget, но от входящих параметров он строит другой виджет) то память в течении первых десятков повторения кода растёт от %MEM 2.2 и плавно доходит до %MEM  2.6 (или 2.7, не столь важно) и опять дальше практически не растёт.
 
В классе MyWidget следующий код (удаление всех виджетов в слое у widget2) результата так же не даёт
Код

        for i in range (self.grid.count()):
            w = self.grid.itemAt(i)
            if hasattr (w, 'widget'):
                if hasattr (w.widget(), 'close'):
                    w.widget().close()
                widg = w.widget()
                del widg
            del w


Подскажите, что можно сделать и почему так?
Спасибо.
PM MAIL   Вверх
spirits25
Дата 24.2.2012, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.2.2012

Репутация: нет
Всего: нет



Может хоть в таком кто-нибудь подскажет?
почему процесс начинает кушать всё больше и больше памяти??? 
Код

from PySide import QtGui, QtCore
import datetime, sys
import gc

class MyWgt(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.ld = []
        for i in range (20):
        self.ld.append(QtGui.QLabel(self))
        
    for i in self.ld:
        i.deleteLater()
    del self.ld

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)


app = QtGui.QApplication(sys.argv)

gc.enable()
for i in range (1000):
    print i
    ex = MyWgt()
    ex.show()
    ex.close()

    # как его удалить??????
    ex.destroy()
    del ex
    
    if i % 10 == 0:
    gc.collect()


i = 0
while (True):
    if i < 100000:
    i += 1
    else:
    i = 0

sys.exit(1)


PM MAIL   Вверх
Google
  Дата 14.10.2019, 03:44 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Разработка GUI | Следующая тема »


 




[ Время генерации скрипта: 0.1120 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.