abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:22 | IT novinky

    Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.

    Ladislav Hagara | Komentářů: 0
    včera 22:33 | Nová verze

    Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.

    Ladislav Hagara | Komentářů: 2
    2.5. 22:22 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).

    Ladislav Hagara | Komentářů: 0
    2.5. 19:11 | IT novinky

    Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.

    Ladislav Hagara | Komentářů: 3
    2.5. 11:22 | Zajímavý projekt

    Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.

    Ladislav Hagara | Komentářů: 2
    2.5. 09:11 | Bezpečnostní upozornění

    Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.

    Ladislav Hagara | Komentářů: 2
    1.5. 20:00 | Komunita

    V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.

    Ladislav Hagara | Komentářů: 3
    1.5. 19:22 | IT novinky

    Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).

    Ladislav Hagara | Komentářů: 0
    30.4. 22:33 | Nová verze

    Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.

    Ladislav Hagara | Komentářů: 0
    30.4. 17:44 | Zajímavý článek

    Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.

    karkar | Komentářů: 0
    Jaký filesystém primárně používáte?
     (57%)
     (1%)
     (9%)
     (22%)
     (4%)
     (2%)
     (3%)
     (0%)
     (1%)
     (3%)
    Celkem 516 hlasů
     Komentářů: 19, poslední 30.4. 11:32
    Rozcestník

    PyQt4 memory leak?

    23.11.2008 13:21 | Přečteno: 1030× | Linux | poslední úprava: 23.11.2008 13:20

    Nedávno som začal viac-menej z donútenia (škola) robiť nejaký program ako semestrálku v pythonovi. Konkrétne som si povedal, že urobím gui k boinc_client-ovi. Prekvapilo ma ale, že aplikácia zaberá stále viac RAM.

    Takže po dlhom skúmaní som došiel k záveru, že problém je niekde okolo riadku s data = QVariant.fromList(...). Tak som urobil malý programík v pythonovi na ktorom by som si vyskúšal ako sa dá uvoľniť táto pamäť. Takže obsah toho malého programíku:

    from PyQt4.QtCore import QVariant
    
    while True:
    	zoznam = QVariant.fromList([QVariant('text1'), QVariant('text2')])
    	zoznam.clear()
    	del(zoznam)
    

    Predpokladám, že tento kód v pythonovi by mal byť ekvivalentný s nasledujúcim programom v C++:

    #include <QVariant>
    #include <QList>
    
    int main(int argc, char *argv[])
    {
    	while (1)
    	{
    		QList<QVariant> zoznam;
    		zoznam.append(QVariant("text1"));
    		zoznam.append(QVariant("text2"));
    		QVariant variant = QVariant(zoznam);
    	}
    }
    

    Napriek tomu po spustení programu v pythonovi sa obsadená RAM stále zväčšuje zatiaľ čo v C++ nie. Robím niečo zle alebo je chyba skutočne niekde mimo môjho kódu? Robí to problémy aj ostatným užívateľom alebo len mne (napríklad preto, že PyQt4 zle skompiloval)?

    Pre tých ktorí chcú vidieť čo to vlastne robím som prihodil aj screenshoty, prípadne môžete pozrieť video, zdrojové kódy nedám, hambím sa za ne.

           

    Hodnocení: 100 %

            špatnédobré        

    Obrázky

    PyQt4 memory leak?, obrázek 1 PyQt4 memory leak?, obrázek 2

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Luboš Doležel (Doli) avatar 23.11.2008 13:23 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Jak má tohle fungovat?
    QVariant variant = QVariant(zoznam);
    Ten řádek je k ničemu...
    mirec avatar 23.11.2008 13:28 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Robí zhruba to isté čo v python zdrojovom kóde. Išlo mi len o to aby vytváralo QVariant objekt (aby som vyskúšal či nie je chyba v Qt4). Tie 2 zdrojové kódy nemajú žiaden hlbší zmysel, akurát jeden z nich na mojom stroji žerie nenormálne veľa RAM.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Luboš Doležel (Doli) avatar 23.11.2008 13:44 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Aha, už to chápu, nevšimnul jsem si toho listu v Pythonu.
    andree avatar 23.11.2008 15:51 andree | skóre: 39 | blog: andreeeeelog
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?

    noo, medzi tymi testami je viacero rozdielov... najzasadnejsi ale asi v tom, ze v c++ kode sa ti tie objekty naozaj uvolnia z RAM, kym v pythone je garbage collector.. skus tam este ked tak pridat import gc; gc.collect() za ten kod 'del'

    mirec avatar 23.11.2008 16:12 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    No znížilo to spotrebu RAM na asi 50 kB/s. Neviem či to je spôsobené spomalením zamotného programu (teda volaním collect) alebo to uvoľňuje niečo navyše.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    mirec avatar 23.11.2008 18:04 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Ok, takže som trochu skúmal či je to menej nenažrané. V skutočnosti to len extrémne spomalí beh (samozrejme hovorím o tom malom testovacom programe, pri obyčajnom gui to je samozrejme zanedbateľné).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    23.11.2008 20:55 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Zkus nastavit debugovací režim garbage collectoru gc.set_debug(gc.DEBUG_LEAK). V gc.garbage bys pak měl mít seznam objektů, které se nedají uvolnit.
    When your hammer is C++, everything begins to look like a thumb.
    mirec avatar 23.11.2008 21:42 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    To zvyknem vždy kontrolovať. Výstup po určitom počte iterácii (na asi 100MB) je [].
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    24.11.2008 09:18 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Takže na openSUSE 11.1 mi to dělá to samé. Navíc volání gc.collect() program spíše jenom zpomalí, takže se zdá, že to něco řeší, ale vždy vrátí 0 uvolněných objektů. Co narůstá je počet objektů (gc.get_objects()), přičemž garbage collector se zdá pracuje, protože počet objektů v jednotlivých generací gc.get_count() roste, ale taky klesá.

    Při nastaveném gc.DEBUG_STATS to naopak vypadá, že collector nepracuje, protože počet objektů roste. Ale ony si údaje gc.get_count() a to, co vypisuje gc samotný, moc neodpovídají.
    gc: done.                                     
    gc: collecting generation 0...                
    gc: objects in each generation: 703 6300 58705
    gc: done.                                     
    gc: collecting generation 0...                
    gc: objects in each generation: 703 7000 58705
    gc: done.                                     
    gc: collecting generation 1...                
    gc: objects in each generation: 703 7700 58705
    gc: done.                                     
    gc: collecting generation 0...                
    gc: objects in each generation: 703 0 67105  
    
    Podle mě je to bug a mělo by to být oznámeno autorům PyQt4.
    When your hammer is C++, everything begins to look like a thumb.
    mirec avatar 23.11.2008 23:08 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Ok, takže skúsme to uzavrieť. Prosím ak má niekto PyQt4 nech skúsi či to isté robí aj na inom stroji (teda hlavne na inej distribúcii). Predpokladám, že to asi nie je moja chyba, takže ak to robí aj niekomu inému nebolo by zlé nahlásiť bug.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    24.11.2008 00:07 helb
    Rozbalit Rozbalit vše Re: PyQt4 memory leak?
    Zkusil jsem a deje se mi to na notebooku (gentoo 32bit, python 2.6, PyQt4 4.4.4) i desktopu (gentoo 64it, python 2.5, PyQt4 4.4.3).

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.