Portál AbcLinuxu, 12. května 2024 04:01


Dotaz: python memory leak

6.11.2017 13:45 marek
python memory leak
Přečteno: 664×
Odpovědět | Admin

Dobry den.

Spotreba pameti tohoto programku s casem roste:

#!/usr/bin/env python3
import gi,signal
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import AppIndicator3, GLib, Gtk
from xkbgroup import XKeyboard
class IndicatorTestIcon:
    NAME = ""
    xkb = XKeyboard()
    def __init__( self ):
        self.indicator = AppIndicator3.Indicator.new( "xkb", self.getIconName(), AppIndicator3.IndicatorCategory.APPLICATION_STATUS )
        self.indicator.set_status( AppIndicator3.IndicatorStatus.ACTIVE )
        self.buildMenu()
    def main( self ):
        GLib.timeout_add(500, self.update )
        Gtk.main()
        return True
    def update( self ):
        if self.xkb.group_symbol+self.xkb.group_variant != self.NAME:
            self.indicator.set_icon_full( self.getIconName(), "" )
        self.NAME = self.xkb.group_symbol+self.xkb.group_variant
        return True
    def buildMenu( self ):
        menu = Gtk.Menu()
        for x in range(0, self.xkb.groups_count):
            if self.xkb.groups_variants[x] :
                name = self.xkb.groups_symbols[x]+"("+self.xkb.groups_variants[x]+")"
            else:
                name = self.xkb.groups_symbols[x]
            item = Gtk.MenuItem(name)
            item.connect('activate', self.ac, x)
            menu.append(item)
            del item
        self.indicator.set_menu( menu )
        menu.show_all()
        del menu
        return True
    def ac(self, source, ic):
        self.buildMenu()
        self.xkb.group_num=ic
        return True
    def getIconName( self ):
        if self.xkb.group_variant != "" :
            return "/usr/local/sbin/kbdata/"+self.xkb.group_symbol+"("+self.xkb.group_variant+").xpm"
        return "/usr/local/sbin/kbdata/"+self.xkb.group_symbol+".xpm"
signal.signal(signal.SIGINT, signal.SIG_DFL)
if __name__ == "__main__": IndicatorTestIcon().main()

Mam to pusteno trikrat, prvni proces bezi 2 dny, druhu par sekund, treti par hodin:

<[user@localhost ~]$ ps -C python3 -o pid --no-headers| xargs -l1 pmap -x 14752 | grep  total
[user@localhost ~]$
total kB          894988  295364  252572
total kB          572488   43616   17300
total kB          582132   53288   26956
[user@localhost ~]$

Jak je mozne, ze se spotreba pameti tolik lisi, cim tomu zabranit?

Programek zobrazuje v tray aktualni rozlozeni klavesnice - jak to pripadne udelat lepe?

Dekuji.

marek

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.11.2017 18:04 ehmmm
Rozbalit Rozbalit vše Re: python memory leak
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takhle laicky na prvni pohled se nabizi prozkoumat chovani set_icon_full().
7.11.2017 13:18 marek
Rozbalit Rozbalit vše Re: python memory leak

Dekuji za odpoved.

po zkoumani jsem zjistil, ze spotreba pameti roste i kdyz to ocesam pouze na:

#!/usr/bin/env python3
from xkbgroup import XKeyboard
import time

while True:
    xkb = XKeyboard()
    time.sleep(0.1)
    del xkb

Takze chyba snad nalezena...

marek

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.